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);
        }
Example #3
0
        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);
        }