예제 #1
0
 public override void GenerateX86NasmAsm(StringBuilder sb)
 {
     string[] setMxcsrInstrs = new string[2];
     setMxcsrInstrs[0] = "  mov r15, 0x1f80\n  mov [r8], r15\n  ldmxcsr [r8]\n  addss xmm0, xmm1"; // default
     setMxcsrInstrs[1] = "  mov r15, 0x9fc0\n  mov [r8], r15\n  ldmxcsr [r8]\n  addss xmm0, xmm1"; // set denormals are zero, flush to zero
     UarchTestHelpers.GenerateX86NasmStructureTestFuncs(sb, this.Counts, this.Prefix, setMxcsrInstrs, setMxcsrInstrs, false);
 }
예제 #2
0
        public override void GenerateX86GccAsm(StringBuilder sb)
        {
            string initInstrs = "  vmovups (%r8), %ymm1\n" +
                                "  vmovaps %ymm1, %ymm0\n" +
                                "  vmovaps %ymm1, %ymm2\n" +
                                "  vaddps %ymm1, %ymm2, %ymm3\n" +
                                "  vaddps %ymm1, %ymm3, %ymm4\n" +
                                "  vaddps %ymm1, %ymm4, %ymm5\n" +
                                "  vaddps %ymm1, %ymm5, %ymm6\n" +
                                "  vaddps %ymm1, %ymm1, %ymm7\n" +
                                "  vaddps %ymm1, %ymm2, %ymm8\n" +
                                "  vaddps %ymm1, %ymm3, %ymm9\n" +
                                "  vaddps %ymm2, %ymm4, %ymm10\n" +
                                "  vaddps %ymm2, %ymm5, %ymm11\n" +
                                "  vaddps %ymm2, %ymm1, %ymm12\n" +
                                "  vaddps %ymm2, %ymm2, %ymm13\n" +
                                "  vaddps %ymm2, %ymm3, %ymm14\n" +
                                "  vaddps %ymm2, %ymm4, %ymm15\n";

            string postLoadInstr = "  vaddps %ymm1, %ymm2, %ymm3";

            string[] unrolledAdds = new string[11];
            unrolledAdds[0]  = "  add %r11, %r8";
            unrolledAdds[1]  = "  add %r11, %r14";
            unrolledAdds[2]  = "  add %r11, %r13";
            unrolledAdds[3]  = "  add %r11, %r12";
            unrolledAdds[4]  = "  add %r11, %r15";
            unrolledAdds[5]  = "  add %r11, %r8";
            unrolledAdds[6]  = "  add %r11, %r14";
            unrolledAdds[7]  = "  add %r11, %r13";
            unrolledAdds[8]  = "  add %r11, %r15";
            unrolledAdds[9]  = "  add %r11, %r12";
            unrolledAdds[10] = "  add %r11, %r8";
            UarchTestHelpers.GenerateX86AsmStructureTestFuncs(sb, this.Counts, this.Prefix, unrolledAdds, unrolledAdds, true, initInstrs: initInstrs, postLoadInstrs1: postLoadInstr, postLoadInstrs2: postLoadInstr);
        }
        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);
        }
예제 #4
0
 public override void GenerateX86GccAsm(StringBuilder sb)
 {
     string[] setMxcsrInstrs = new string[2];
     setMxcsrInstrs[0] = "  mov $0x1f80, %r15\n  mov %r15, (%r8)\n  ldmxcsr (%r8)\n  addss %xmm0, %xmm1"; // default
     setMxcsrInstrs[1] = "  mov $0x9fc0, %r15\n  mov %r15, (%r8)\n  ldmxcsr (%r8)\n  addss %xmm0, %xmm1"; // set denormals are zero, flush to zero
     UarchTestHelpers.GenerateX86AsmStructureTestFuncs(sb, this.Counts, this.Prefix, setMxcsrInstrs, setMxcsrInstrs, false);
 }
        public override void GenerateX86NasmAsm(StringBuilder sb)
        {
            string[] dependentLoads = new string[1];
            dependentLoads[0] = "  mov r15, [r8 + rdx * 4]";

            UarchTestHelpers.GenerateX86NasmDivStructureTestFuncs(sb, this.Counts, this.Prefix, dependentLoads, dependentLoads, false);
        }
예제 #6
0
        public override void GenerateX86NasmAsm(StringBuilder sb)
        {
            string initInstrs = "  vmovups ymm1, [r8]\n" +
                                "  vmovaps ymm0, ymm1\n" +
                                "  vmovaps ymm0, ymm2\n" +
                                "  vaddps ymm3, ymm1, ymm2\n" +
                                "  vaddps ymm4, ymm1, ymm3\n" +
                                "  vaddps ymm5, ymm1, ymm4\n" +
                                "  vaddps ymm6, ymm1, ymm5\n" +
                                "  vaddps ymm7, ymm1, ymm1\n" +
                                "  vaddps ymm8, ymm1, ymm2\n" +
                                "  vaddps ymm9, ymm1, ymm3\n" +
                                "  vaddps ymm10, ymm2, ymm4\n" +
                                "  vaddps ymm11, ymm2, ymm5\n" +
                                "  vaddps ymm12, ymm2, ymm1\n" +
                                "  vaddps ymm13, ymm2, ymm2\n" +
                                "  vaddps ymm14, ymm2, ymm3\n" +
                                "  vaddps ymm15, ymm2, ymm4\n";

            string postLoadInstr = "  vaddps ymm3, ymm1, ymm2";

            string[] unrolledAdds = new string[11];
            unrolledAdds[0]  = "  add r8, r11";
            unrolledAdds[1]  = "  add r14, r11";
            unrolledAdds[2]  = "  add r13, r11";
            unrolledAdds[3]  = "  add r12, r11";
            unrolledAdds[4]  = "  add r11, r11";
            unrolledAdds[5]  = "  add r8, r11";
            unrolledAdds[6]  = "  add r15, r11";
            unrolledAdds[7]  = "  add r14, r11";
            unrolledAdds[8]  = "  add r13, r11";
            unrolledAdds[9]  = "  add r12, r11";
            unrolledAdds[10] = "  add r8, r11";
            UarchTestHelpers.GenerateX86NasmStructureTestFuncs(sb, this.Counts, this.Prefix, unrolledAdds, unrolledAdds, true, initInstrs: initInstrs, postLoadInstrs1: postLoadInstr, postLoadInstrs2: postLoadInstr);
        }
예제 #7
0
 public CvtSchedTest(int low, int high, int step)
 {
     this.Counts      = UarchTestHelpers.GenerateCountArray(low, high, step);
     this.Prefix      = "cvtsched";
     this.Description = "I2F (cvtsi2ss) Scheduler Capacity Test";
     this.FunctionDefinitionParameters = "uint64_t iterations, int *arr";
     this.GetFunctionCallParameters    = "structIterations, A";
 }
예제 #8
0
 public LdqStqTest(int low, int high, int step)
 {
     this.Counts      = UarchTestHelpers.GenerateCountArray(low, high, step);
     this.Prefix      = "mixldqstq";
     this.Description = "Mixed Load/Store Queue Test (mem ops pending retire)";
     this.FunctionDefinitionParameters = "uint64_t iterations, int *arr, int *arr1";
     this.GetFunctionCallParameters    = "structIterations, A, B";
 }
예제 #9
0
 public override void GenerateArmAsm(StringBuilder sb)
 {
     string[] instrs = new string[4];
     instrs[0] = "  str x15, [x2]";
     instrs[1] = "  ldr x14, [x1]";
     instrs[2] = "  str x13, [x2]";
     instrs[3] = "  ldr x12, [x1]";
     UarchTestHelpers.GenerateArmAsmStructureTestFuncs(sb, this.Counts, this.Prefix, instrs, instrs, true);
 }
예제 #10
0
 public override void GenerateX86GccAsm(StringBuilder sb)
 {
     string[] instrs = new string[4];
     instrs[0] = "  mov %r15, (%r8)";
     instrs[1] = "  mov (%rdx), %r14";
     instrs[2] = "  mov %r13, (%r8)";
     instrs[3] = "  mov (%rdx), %r12";
     UarchTestHelpers.GenerateX86AsmStructureTestFuncs(sb, this.Counts, this.Prefix, instrs, instrs, true);
 }
예제 #11
0
 public override void GenerateX86NasmAsm(StringBuilder sb)
 {
     string[] instrs = new string[4];
     instrs[0] = "  mov [r8], r15";
     instrs[1] = "  mov r14, [rdx]";
     instrs[2] = "  mov [r8], r13";
     instrs[3] = "  mov r12, [rdx]";
     UarchTestHelpers.GenerateX86NasmStructureTestFuncs(sb, this.Counts, this.Prefix, instrs, instrs, true);
 }
예제 #12
0
 public StqTest(int low, int high, int step)
 {
     this.Counts      = UarchTestHelpers.GenerateCountArray(low, high, step);
     this.Prefix      = "stq";
     this.Description = "Store Queue Test (stores pending retire)";
     this.FunctionDefinitionParameters = "uint64_t iterations, int *arr, int *arr1";
     this.GetFunctionCallParameters    = "structIterations, A, B";
     this.DivideTimeByCount            = false;
 }
예제 #13
0
 public LdmTest(int low, int high, int step)
 {
     this.Counts      = UarchTestHelpers.GenerateCountArray(low, high, step);
     this.Prefix      = "ldm";
     this.Description = "Integer (add) without Load Dependency Matrix Scheduler Capacity Test";
     this.FunctionDefinitionParameters = "uint64_t iterations, int *arr";
     this.GetFunctionCallParameters    = "structIterations, A";
     this.DivideTimeByCount            = false;
 }
 public MixLoadStoreSchedTest(int low, int high, int step)
 {
     this.Counts      = UarchTestHelpers.GenerateCountArray(low, high, step);
     this.Prefix      = "mixloadstoresched";
     this.Description = "Mixed Load/Store (Address Dependency) scheduler capacity test";
     this.FunctionDefinitionParameters = "uint64_t iterations, int *arr, int *arr2";
     this.GetFunctionCallParameters    = "structIterations, A, B";
     this.DivideTimeByCount            = false;
 }
예제 #15
0
 public override void GenerateX86NasmAsm(StringBuilder sb)
 {
     string[] unrolledLoads = new string[4];
     unrolledLoads[0] = "  mov [r8], r15";
     unrolledLoads[1] = "  mov [r8], r14";
     unrolledLoads[2] = "  mov [r8], r13";
     unrolledLoads[3] = "  mov [r8], r12";
     UarchTestHelpers.GenerateX86NasmStructureTestFuncs(sb, this.Counts, this.Prefix, unrolledLoads, unrolledLoads, true);
 }
예제 #16
0
 public MmxRfTest(int low, int high, int step)
 {
     this.Counts      = UarchTestHelpers.GenerateCountArray(low, high, step);
     this.Prefix      = "mmxrf";
     this.Description = "64-bit MMX RF Capacity Test. x86 only";
     this.FunctionDefinitionParameters = "uint64_t iterations, int *arr, int *arr2";
     this.GetFunctionCallParameters    = "structIterations, A, B";
     this.DivideTimeByCount            = false;
 }
예제 #17
0
 public override void GenerateArmAsm(StringBuilder sb)
 {
     string[] unrolledAdds = new string[4];
     unrolledAdds[0] = "  fadd v20.4s, v15.4s, v16.4s";
     unrolledAdds[1] = "  fadd v17.4s, v15.4s, v16.4s";
     unrolledAdds[2] = "  fadd v18.4s, v15.4s, v16.4s";
     unrolledAdds[3] = "  fadd v19.4s, v15.4s, v16.4s";
     UarchTestHelpers.GenerateArmAsmFpSchedTestFuncs(sb, this.Counts, this.Prefix, unrolledAdds, unrolledAdds);
 }
예제 #18
0
 public override void GenerateArmAsm(StringBuilder sb)
 {
     string[] unrolledAdds = new string[4];
     unrolledAdds[0] = "  add v15.2s, v15.2s, v19.2s";
     unrolledAdds[1] = "  add v16.2s, v16.2s, v19.2s";
     unrolledAdds[2] = "  add v17.2s, v17.2s, v19.2s";
     unrolledAdds[3] = "  add v18.2s, v18.2s, v19.2s";
     UarchTestHelpers.GenerateArmAsmStructureTestFuncs(sb, this.Counts, this.Prefix, unrolledAdds, unrolledAdds);
 }
예제 #19
0
 public NotIntRfTest(int low, int high, int step)
 {
     this.Counts      = UarchTestHelpers.GenerateCountArray(low, high, step);
     this.Prefix      = "notintrf";
     this.Description = "Integer RF Test with not (no setting flags)";
     this.FunctionDefinitionParameters = "uint64_t iterations, int *arr";
     this.GetFunctionCallParameters    = "structIterations, A";
     this.DivideTimeByCount            = false;
 }
예제 #20
0
 public FpRfTest(int low, int high, int step)
 {
     this.Counts      = UarchTestHelpers.GenerateCountArray(low, high, step);
     this.Prefix      = "fprf";
     this.Description = "FP (64-bit scalar) RF Test";
     this.FunctionDefinitionParameters = "uint64_t iterations, int *arr, float *floatArr";
     this.GetFunctionCallParameters    = "structIterations, A, fpArr";
     this.DivideTimeByCount            = false;
 }
예제 #21
0
 public MixMulBtsSchedTest(int low, int high, int step)
 {
     this.Counts      = UarchTestHelpers.GenerateCountArray(low, high, step);
     this.Prefix      = "mixmulbtssched";
     this.Description = "Mixed Multiply/BTS Scheduler Capacity Test";
     this.FunctionDefinitionParameters = "uint64_t iterations, int *arr";
     this.GetFunctionCallParameters    = "structIterations, A";
     this.DivideTimeByCount            = false;
 }
예제 #22
0
 public override void GenerateX86NasmAsm(StringBuilder sb)
 {
     string[] unrolledAdds = new string[4];
     unrolledAdds[0] = "  vaddps ymm1, ymm1, ymm0";
     unrolledAdds[1] = "  vaddps ymm2, ymm2, ymm0";
     unrolledAdds[2] = "  vaddps ymm3, ymm3, ymm0";
     unrolledAdds[3] = "  vaddps ymm4, ymm4, ymm0";
     UarchTestHelpers.GenerateX86NasmFp256SchedTestFuncs(sb, this.Counts, this.Prefix, unrolledAdds, unrolledAdds);
 }
예제 #23
0
 public override void GenerateX86GccAsm(StringBuilder sb)
 {
     string[] unrolledLoads = new string[4];
     unrolledLoads[0] = "  mov %r15, (%r8)";
     unrolledLoads[1] = "  mov %r14, (%r8)";
     unrolledLoads[2] = "  mov %r13, (%r8)";
     unrolledLoads[3] = "  mov %r12, (%r8)";
     UarchTestHelpers.GenerateX86AsmStructureTestFuncs(sb, this.Counts, this.Prefix, unrolledLoads, unrolledLoads, true);
 }
예제 #24
0
 public JumpNsqTest(int low, int high, int step)
 {
     this.Counts      = UarchTestHelpers.GenerateCountArray(low, high, step);
     this.Prefix      = "jmpnsq";
     this.Description = "Not-taken Jump Scheduler Capacity Test, Excluding NSQ";
     this.FunctionDefinitionParameters = "uint64_t iterations, int *arr";
     this.GetFunctionCallParameters    = "structIterations, A";
     this.DivideTimeByCount            = false;
 }
예제 #25
0
 public override void GenerateArmAsm(StringBuilder sb)
 {
     string[] unrolledLoads = new string[4];
     unrolledLoads[0] = "  str x15, [x2]";
     unrolledLoads[1] = "  str x14, [x2]";
     unrolledLoads[2] = "  str x13, [x2]";
     unrolledLoads[3] = "  str x12, [x2]";
     UarchTestHelpers.GenerateArmAsmStructureTestFuncs(sb, this.Counts, this.Prefix, unrolledLoads, unrolledLoads, true);
 }
예제 #26
0
 public StoreSchedTest(int low, int high, int step)
 {
     this.Counts      = UarchTestHelpers.GenerateCountArray(low, high, step);
     this.Prefix      = "storesched";
     this.Description = "Store Address Scheduler Capacity Test";
     this.FunctionDefinitionParameters = "uint64_t iterations, int count, int *arr2";
     this.GetFunctionCallParameters    = "structIterations, list_size, B";
     this.DivideTimeByCount            = false;
 }
예제 #27
0
 public FpStoreDataAddNsqTest(int low, int high, int step)
 {
     this.Counts      = UarchTestHelpers.GenerateCountArray(low, high, step);
     this.Prefix      = "fpstoredataaddnsq";
     this.Description = "Store FP 32-bit Data + addss Scheduler Capacity Test, Excluding NSQ. Does storedata share a scheduler with FP add?";
     this.FunctionDefinitionParameters = "uint64_t iterations, int *arr, int *arr1";
     this.GetFunctionCallParameters    = "structIterations, A, B";
     this.DivideTimeByCount            = false;
 }
예제 #28
0
 public Fadd256SchedTest(int low, int high, int step)
 {
     this.Counts      = UarchTestHelpers.GenerateCountArray(low, high, step);
     this.Prefix      = "fadd256sched";
     this.Description = "256-bit FADD Scheduler Capacity Test, 128-bit on ARM";
     this.FunctionDefinitionParameters = "uint64_t iterations, int *arr, float *floatArr";
     this.GetFunctionCallParameters    = "structIterations, A, fpArr";
     this.DivideTimeByCount            = false;
 }
 public Add128SchedTest(int low, int high, int step)
 {
     this.Counts      = UarchTestHelpers.GenerateCountArray(low, high, step);
     this.Prefix      = "add128sched";
     this.Description = "128-bit Integer Add Scheduler Capacity Test";
     this.FunctionDefinitionParameters = "uint64_t iterations, int *arr, int *arr2";
     this.GetFunctionCallParameters    = "structIterations, A, B";
     this.DivideTimeByCount            = false;
 }
예제 #30
0
 public MxcsrTest(int low, int high, int step)
 {
     this.Counts      = UarchTestHelpers.GenerateCountArray(low, high, step);
     this.Prefix      = "mxcsrrename";
     this.Description = "MXCSR renamed registers";
     this.FunctionDefinitionParameters = "uint64_t iterations, int *arr, int *arr1";
     this.GetFunctionCallParameters    = "structIterations, A, B";
     this.DivideTimeByCount            = false;
 }