#define REGPRM3
#endif
+/* By default, gcc does not inline large chunks of code, but we want it to
+ * respect our choices.
+ */
+#if !defined(forceinline)
+#if __GNUC__ < 3
+#define forceinline inline
+#else
+#define forceinline inline __attribute__((always_inline))
+#endif
+#endif
+
#endif /* _COMMON_CONFIG_H */
*/
/* Delete node from the tree if it was linked in. Mark the node unused. */
-static inline void __eb32_delete(struct eb32_node *eb32)
+static forceinline void __eb32_delete(struct eb32_node *eb32)
{
__eb_delete(&eb32->node);
}
* Find the first occurence of a key in the tree <root>. If none can be
* found, return NULL.
*/
-static inline struct eb32_node *__eb32_lookup(struct eb_root *root, u32 x)
+static forceinline struct eb32_node *__eb32_lookup(struct eb_root *root, u32 x)
{
struct eb32_node *node;
eb_troot_t *troot;
* Find the first occurence of a signed key in the tree <root>. If none can
* be found, return NULL.
*/
-static inline struct eb32_node *__eb32i_lookup(struct eb_root *root, s32 x)
+static forceinline struct eb32_node *__eb32i_lookup(struct eb_root *root, s32 x)
{
struct eb32_node *node;
eb_troot_t *troot;
* Only new->key needs be set with the key. The eb32_node is returned.
* If root->b[EB_RGHT]==1, the tree may only contain unique keys.
*/
-static inline struct eb32_node *
+static forceinline struct eb32_node *
__eb32_insert(struct eb_root *root, struct eb32_node *new) {
struct eb32_node *old;
unsigned int side;
* signed keys. Only new->key needs be set with the key. The eb32_node
* is returned. If root->b[EB_RGHT]==1, the tree may only contain unique keys.
*/
-static inline struct eb32_node *
+static forceinline struct eb32_node *
__eb32i_insert(struct eb_root *root, struct eb32_node *new) {
struct eb32_node *old;
unsigned int side;
*/
/* Delete node from the tree if it was linked in. Mark the node unused. */
-static inline void __eb64_delete(struct eb64_node *eb64)
+static forceinline void __eb64_delete(struct eb64_node *eb64)
{
__eb_delete(&eb64->node);
}
* Find the first occurence of a key in the tree <root>. If none can be
* found, return NULL.
*/
-static inline struct eb64_node *__eb64_lookup(struct eb_root *root, u64 x)
+static forceinline struct eb64_node *__eb64_lookup(struct eb_root *root, u64 x)
{
struct eb64_node *node;
eb_troot_t *troot;
* Find the first occurence of a signed key in the tree <root>. If none can
* be found, return NULL.
*/
-static inline struct eb64_node *__eb64i_lookup(struct eb_root *root, s64 x)
+static forceinline struct eb64_node *__eb64i_lookup(struct eb_root *root, s64 x)
{
struct eb64_node *node;
eb_troot_t *troot;
* Only new->key needs be set with the key. The eb64_node is returned.
* If root->b[EB_RGHT]==1, the tree may only contain unique keys.
*/
-static inline struct eb64_node *
+static forceinline struct eb64_node *
__eb64_insert(struct eb_root *root, struct eb64_node *new) {
struct eb64_node *old;
unsigned int side;
* signed keys. Only new->key needs be set with the key. The eb64_node
* is returned. If root->b[EB_RGHT]==1, the tree may only contain unique keys.
*/
-static inline struct eb64_node *
+static forceinline struct eb64_node *
__eb64i_insert(struct eb_root *root, struct eb64_node *new) {
struct eb64_node *old;
unsigned int side;
*/
/* Delete node from the tree if it was linked in. Mark the node unused. */
-static inline void __ebpt_delete(struct ebpt_node *ebpt)
+static forceinline void __ebpt_delete(struct ebpt_node *ebpt)
{
__eb_delete(&ebpt->node);
}
* Find the first occurence of a key in the tree <root>. If none can be
* found, return NULL.
*/
-static inline struct ebpt_node *__ebpt_lookup(struct eb_root *root, void *x)
+static forceinline struct ebpt_node *__ebpt_lookup(struct eb_root *root, void *x)
{
struct ebpt_node *node;
eb_troot_t *troot;
* Only new->key needs be set with the key. The ebpt_node is returned.
* If root->b[EB_RGHT]==1, the tree may only contain unique keys.
*/
-static inline struct ebpt_node *
+static forceinline struct ebpt_node *
__ebpt_insert(struct eb_root *root, struct ebpt_node *new) {
struct ebpt_node *old;
unsigned int side;
#endif
#endif
+/* By default, gcc does not inline large chunks of code, but we want it to
+ * respect our choices.
+ */
+#if !defined(forceinline)
+#if __GNUC__ < 3
+#define forceinline inline
+#else
+#define forceinline inline __attribute__((always_inline))
+#endif
+#endif
+
/* Support passing function parameters in registers. For this, the
* CONFIG_EBTREE_REGPARM macro has to be set to the maximal number of registers
* allowed. Some functions have intentionally received a regparm lower than
* a subtree of at least 2 entries. It will probably never be needed inlined,
* and it is not for end-user.
*/
-static inline struct eb_node *
+static forceinline struct eb_node *
__eb_insert_dup(struct eb_node *sub, struct eb_node *new)
{
struct eb_node *head = sub;
/* Removes a leaf node from the tree if it was still in it. Marks the node
* as unlinked.
*/
-static inline void __eb_delete(struct eb_node *node)
+static forceinline void __eb_delete(struct eb_node *node)
{
__label__ delete_unlink;
unsigned int pside, gpside, sibtype;