On Tuesday 18 September 2007 22:07, Mathieu Desnoyers wrote: > i386 optimization of the immediate values which uses a movl with code patching > to set/unset the value used to populate the register used as variable source. > > Changelog: > - Use text_poke_early with cr0 WP save/restore to patch the bypass. We are > doing > non atomic writes to a code region only touched by us (nobody can execute it > since we are protected by the immediate_mutex). > - Put immediate_set and _immediate_set in the architecture independent header.
> +struct __immediate { > + long var; /* Pointer to the identifier variable of the > + * immediate value > + */ > + long immediate; /* > + * Pointer to the memory location of the > + * immediate value within the instruction. > + */ > + long size; /* Type size. */ > +}; > + case 2: \ > + asm ( ".section __immediate, \"a\", @progbits;\n\t" \ > + ".long %1, (0f)+2, 2;\n\t" \ > + ".previous;\n\t" \ > + "1:\n\t" \ > + ".align 2;\n\t" \ > + "0:\n\t" \ > + "mov %2,%0;\n\t" \ > + : "=r" (value) \ > + : "m" (name##__immediate), \ > + "i" (0)); \ Instead of letting gcc use whatever instruction it sees fit best for accessing the variable (like add/cmp/test...) now we force it to use mov imm,reg first. Maybe with preceding nop due to "align 2". And then we use 12 more bytes in __immediate section *for each* place where you read the variable. Do you plan to use the same approach on x86_64? I mean, longs there are twice as long. Can this be made conditional, on CONFIG_CC_OPTIMIZE_FOR_SIZE perhaps? -- vda - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/