112771Sqtt2@cornell.edu# See LICENSE for license details. 212771Sqtt2@cornell.edu 312771Sqtt2@cornell.edu#***************************************************************************** 412771Sqtt2@cornell.edu# move.S 512771Sqtt2@cornell.edu#----------------------------------------------------------------------------- 612771Sqtt2@cornell.edu# 712771Sqtt2@cornell.edu# This test verifies that fmv.d.x, fmv.x.d, and fsgnj[x|n].d work properly. 812771Sqtt2@cornell.edu# 912771Sqtt2@cornell.edu 1012771Sqtt2@cornell.edu#include "riscv_test.h" 1112771Sqtt2@cornell.edu#include "test_macros.h" 1212771Sqtt2@cornell.edu 1312771Sqtt2@cornell.eduRVTEST_RV64UF 1412771Sqtt2@cornell.eduRVTEST_CODE_BEGIN 1512771Sqtt2@cornell.edu 1612771Sqtt2@cornell.edu#TODO: make 32-bit compatible version 1712771Sqtt2@cornell.edu#define TEST_FSGNJD(n, insn, new_sign, rs1_sign, rs2_sign) \ 1812771Sqtt2@cornell.edu TEST_CASE(n, a0, 0x123456789abcdef0 | (-(new_sign) << 63), \ 1912771Sqtt2@cornell.edu li a1, ((rs1_sign) << 63) | 0x123456789abcdef0; \ 2012771Sqtt2@cornell.edu li a2, -(rs2_sign); \ 2112771Sqtt2@cornell.edu fmv.d.x f1, a1; \ 2212771Sqtt2@cornell.edu fmv.d.x f2, a2; \ 2312771Sqtt2@cornell.edu insn f0, f1, f2; \ 2412771Sqtt2@cornell.edu fmv.x.d a0, f0) 2512771Sqtt2@cornell.edu 2612771Sqtt2@cornell.edu TEST_FSGNJD(10, fsgnj.d, 0, 0, 0) 2712771Sqtt2@cornell.edu TEST_FSGNJD(11, fsgnj.d, 1, 0, 1) 2812771Sqtt2@cornell.edu TEST_FSGNJD(12, fsgnj.d, 0, 1, 0) 2912771Sqtt2@cornell.edu TEST_FSGNJD(13, fsgnj.d, 1, 1, 1) 3012771Sqtt2@cornell.edu 3112771Sqtt2@cornell.edu TEST_FSGNJD(20, fsgnjn.d, 1, 0, 0) 3212771Sqtt2@cornell.edu TEST_FSGNJD(21, fsgnjn.d, 0, 0, 1) 3312771Sqtt2@cornell.edu TEST_FSGNJD(22, fsgnjn.d, 1, 1, 0) 3412771Sqtt2@cornell.edu TEST_FSGNJD(23, fsgnjn.d, 0, 1, 1) 3512771Sqtt2@cornell.edu 3612771Sqtt2@cornell.edu TEST_FSGNJD(30, fsgnjx.d, 0, 0, 0) 3712771Sqtt2@cornell.edu TEST_FSGNJD(31, fsgnjx.d, 1, 0, 1) 3812771Sqtt2@cornell.edu TEST_FSGNJD(32, fsgnjx.d, 1, 1, 0) 3912771Sqtt2@cornell.edu TEST_FSGNJD(33, fsgnjx.d, 0, 1, 1) 4012771Sqtt2@cornell.edu 4112771Sqtt2@cornell.edu// Test fsgnj.s in conjunction with double-precision moves 4212771Sqtt2@cornell.edu#define TEST_FSGNJS(n, rd, rs1, rs2) \ 4312771Sqtt2@cornell.edu TEST_CASE(n, a0, (rd) | (-((rd) >> 31) << 32), \ 4412771Sqtt2@cornell.edu li a1, rs1; \ 4512771Sqtt2@cornell.edu li a2, rs2; \ 4612771Sqtt2@cornell.edu fmv.d.x f1, a1; \ 4712771Sqtt2@cornell.edu fmv.d.x f2, a2; \ 4812771Sqtt2@cornell.edu fsgnj.s f0, f1, f2; \ 4912771Sqtt2@cornell.edu fmv.x.s a0, f0); \ 5012771Sqtt2@cornell.edu TEST_CASE(1##n, a0, (rd) | 0xffffffff00000000, \ 5112771Sqtt2@cornell.edu li a1, rs1; \ 5212771Sqtt2@cornell.edu li a2, rs2; \ 5312771Sqtt2@cornell.edu fmv.d.x f1, a1; \ 5412771Sqtt2@cornell.edu fmv.d.x f2, a2; \ 5512771Sqtt2@cornell.edu fsgnj.s f0, f1, f2; \ 5612771Sqtt2@cornell.edu fmv.x.d a0, f0) 5712771Sqtt2@cornell.edu 5812771Sqtt2@cornell.edu TEST_FSGNJS(40, 0x7fc00000, 0x7ffffffe12345678, 0) 5912771Sqtt2@cornell.edu TEST_FSGNJS(41, 0x7fc00000, 0xfffffffe12345678, 0) 6012771Sqtt2@cornell.edu TEST_FSGNJS(42, 0x7fc00000, 0x7fffffff12345678, 0) 6112771Sqtt2@cornell.edu TEST_FSGNJS(43, 0x12345678, 0xffffffff12345678, 0) 6212771Sqtt2@cornell.edu 6312771Sqtt2@cornell.edu TEST_FSGNJS(50, 0x7fc00000, 0x7ffffffe12345678, 0x80000000) 6412771Sqtt2@cornell.edu TEST_FSGNJS(51, 0x7fc00000, 0xfffffffe12345678, 0x80000000) 6512771Sqtt2@cornell.edu TEST_FSGNJS(52, 0x7fc00000, 0x7fffffff12345678, 0x80000000) 6612771Sqtt2@cornell.edu TEST_FSGNJS(53, 0x12345678, 0xffffffff12345678, 0x80000000) 6712771Sqtt2@cornell.edu 6812771Sqtt2@cornell.edu TEST_FSGNJS(60, 0xffc00000, 0x7ffffffe12345678, 0xffffffff80000000) 6912771Sqtt2@cornell.edu TEST_FSGNJS(61, 0xffc00000, 0xfffffffe12345678, 0xffffffff80000000) 7012771Sqtt2@cornell.edu TEST_FSGNJS(62, 0x92345678, 0xffffffff12345678, 0xffffffff80000000) 7112771Sqtt2@cornell.edu TEST_FSGNJS(63, 0x12345678, 0xffffffff12345678, 0x7fffffff80000000) 7212771Sqtt2@cornell.edu 7312771Sqtt2@cornell.edu// Test fsgnj.d in conjunction with single-precision moves 7412771Sqtt2@cornell.edu#define TEST_FSGNJD_SP(n, isnan, rd, rs1, rs2) \ 7512771Sqtt2@cornell.edu TEST_CASE(n, a0, ((rd) & 0xffffffff) | (-(((rd) >> 31) & 1) << 32), \ 7612771Sqtt2@cornell.edu li a1, rs1; \ 7712771Sqtt2@cornell.edu li a2, rs2; \ 7812771Sqtt2@cornell.edu fmv.d.x f1, a1; \ 7912771Sqtt2@cornell.edu fmv.d.x f2, a2; \ 8012771Sqtt2@cornell.edu fsgnj.d f0, f1, f2; \ 8112771Sqtt2@cornell.edu feq.s a0, f0, f0; \ 8212771Sqtt2@cornell.edu addi a0, a0, -!(isnan); \ 8312771Sqtt2@cornell.edu bnez a0, 1f; \ 8412771Sqtt2@cornell.edu fmv.x.s a0, f0; \ 8512771Sqtt2@cornell.edu 1:); \ 8612771Sqtt2@cornell.edu TEST_CASE(1##n, a0, rd, \ 8712771Sqtt2@cornell.edu li a1, rs1; \ 8812771Sqtt2@cornell.edu li a2, rs2; \ 8912771Sqtt2@cornell.edu fmv.d.x f1, a1; \ 9012771Sqtt2@cornell.edu fmv.d.x f2, a2; \ 9112771Sqtt2@cornell.edu fsgnj.d f0, f1, f2; \ 9212771Sqtt2@cornell.edu fmv.x.d a0, f0; \ 9312771Sqtt2@cornell.edu 1:) 9412771Sqtt2@cornell.edu 9512771Sqtt2@cornell.edu TEST_FSGNJD_SP(70, 0, 0xffffffff11111111, 0xffffffff11111111, 0xffffffff11111111) 9612771Sqtt2@cornell.edu TEST_FSGNJD_SP(71, 1, 0x7fffffff11111111, 0xffffffff11111111, 0x7fffffff11111111) 9712771Sqtt2@cornell.edu TEST_FSGNJD_SP(72, 0, 0xffffffff11111111, 0xffffffff11111111, 0xffffffff91111111) 9812771Sqtt2@cornell.edu TEST_FSGNJD_SP(73, 0, 0xffffffff11111111, 0xffffffff11111111, 0x8000000000000000) 9912771Sqtt2@cornell.edu TEST_FSGNJD_SP(74, 0, 0xffffffff11111111, 0x7fffffff11111111, 0xffffffff11111111) 10012771Sqtt2@cornell.edu TEST_FSGNJD_SP(75, 1, 0x7fffffff11111111, 0x7fffffff11111111, 0x7fffffff11111111) 10112771Sqtt2@cornell.edu TEST_FSGNJD_SP(76, 0, 0xffffffff11111111, 0x7fffffff11111111, 0xffffffff91111111) 10212771Sqtt2@cornell.edu TEST_FSGNJD_SP(77, 0, 0xffffffff11111111, 0x7fffffff11111111, 0x8000000000000000) 10312771Sqtt2@cornell.edu 10412771Sqtt2@cornell.edu TEST_PASSFAIL 10512771Sqtt2@cornell.edu 10612771Sqtt2@cornell.eduRVTEST_CODE_END 10712771Sqtt2@cornell.edu 10812771Sqtt2@cornell.edu .data 10912771Sqtt2@cornell.eduRVTEST_DATA_BEGIN 11012771Sqtt2@cornell.edu 11112771Sqtt2@cornell.edu TEST_DATA 11212771Sqtt2@cornell.edu 11312771Sqtt2@cornell.eduRVTEST_DATA_END 114