public override void GenerateX86GccAsm(StringBuilder sb) { string[] dependentLoads = new string[1]; dependentLoads[0] = " mov (%r8, %rdx, 4), %r15"; UarchTestHelpers.GenerateX86AsmDivStructureTestFuncs(sb, this.Counts, this.Prefix, dependentLoads, dependentLoads, false); }
public override void GenerateX86GccAsm(StringBuilder sb) { string[] dependentStores = new string[4]; dependentStores[0] = " mov %rdx, (%r8, %r15, 4)"; dependentStores[1] = " mov %rdx, (%r8, %r15, 4)"; dependentStores[2] = " mov %rdx, (%r8, %r15, 4)"; dependentStores[3] = " mov %rdx, (%r8, %r15, 4)"; string[] dependentStores1 = new string[4]; dependentStores1[0] = " mov %rdx, (%r8, %r11, 4)"; dependentStores1[1] = " mov %rdx, (%r8, %r11, 4)"; dependentStores1[2] = " mov %rdx, (%r8, %r11, 4)"; dependentStores1[3] = " mov %rdx, (%r8, %r11, 4)"; UarchTestHelpers.GenerateX86AsmDivStructureTestFuncs(sb, this.Counts, this.Prefix, dependentStores, dependentStores1, false); }
public override void GenerateX86GccAsm(StringBuilder sb) { string[] dependentStores = new string[4]; dependentStores[0] = " mov %r15, (%r8, %rdx, 4)"; dependentStores[1] = " mov %r15, (%r8, %rdx, 4)"; dependentStores[2] = " mov %r15, (%r8, %rdx, 4)"; dependentStores[3] = " mov %r15, (%r8, %rdx, 4)"; string[] dependentStores1 = new string[4]; dependentStores1[0] = " mov %r11, (%r8, %rdx, 4)"; dependentStores1[1] = " mov %r11, (%r8, %rdx, 4)"; dependentStores1[2] = " mov %r11, (%r8, %rdx, 4)"; dependentStores1[3] = " mov %r11, (%r8, %rdx, 4)"; // instead of using pointer chasing loads, use a nasty block of chained integer divisions to block retirement // some older/less capable architectures will not reorder loads ahead of stores with unknown addresses, // which breaks the usual technique UarchTestHelpers.GenerateX86AsmDivStructureTestFuncs(sb, this.Counts, this.Prefix, dependentStores, dependentStores1, false); }