input_desc = [ "v128:data", "v128:fill", "u32:offset", "u32:dummy", ] output_desc = [ "v128:lfv_e0", "v128:lfv_e1", "v128:lfv_e2", "v128:lfv_e3", "v128:lfv_e4", "v128:lfv_e5", "v128:lfv_e6", "v128:lfv_e7", "v128:lfv_e8", "v128:lfv_e9", "v128:lfv_e10", "v128:lfv_e11", "v128:lfv_e12", "v128:lfv_e13", "v128:lfv_e14", "v128:lfv_e15", "v128:sfv_e0", "v128:sfv_e1", "v128:sfv_e2", "v128:sfv_e3", "v128:sfv_e4", "v128:sfv_e5", "v128:sfv_e6", "v128:sfv_e7", "v128:sfv_e8", "v128:sfv_e9", "v128:sfv_e10", "v128:sfv_e11", "v128:sfv_e12", "v128:sfv_e13", "v128:sfv_e14", "v128:sfv_e15", ] rsp_code = """ li a0,$0 li a1,$800 lw t4,$20(a0) // input: offset // This test is very sensitive to possible read/write mistakes to memory // and we want to make sure that writes actually happen. // So clear all registers and also output memory area to make sure // tests do not shadow previous results. lqv v0[e0],$10(a0) // input: fill lqv v1[e0],$10(a0) // input: fill lqv v2[e0],$10(a0) // input: fill lqv v3[e0],$10(a0) // input: fill lqv v4[e0],$10(a0) // input: fill lqv v5[e0],$10(a0) // input: fill lqv v6[e0],$10(a0) // input: fill lqv v7[e0],$10(a0) // input: fill lqv v8[e0],$10(a0) // input: fill lqv v9[e0],$10(a0) // input: fill lqv v10[e0],$10(a0) // input: fill lqv v11[e0],$10(a0) // input: fill lqv v12[e0],$10(a0) // input: fill lqv v13[e0],$10(a0) // input: fill lqv v14[e0],$10(a0) // input: fill lqv v15[e0],$10(a0) // input: fill add a2,a1,0 addi a2,$1F0 ClearLoop: sqv v0[e0],$00(a2) bne a1,a2,ClearLoop subi a2,$10 add a0,t4 // add offset to disalign lfv v0[e0],$00(a0) lfv v1[e1],$00(a0) lfv v2[e2],$00(a0) lfv v3[e3],$00(a0) lfv v4[e4],$00(a0) lfv v5[e5],$00(a0) lfv v6[e6],$00(a0) lfv v7[e7],$00(a0) lfv v8[e8],$00(a0) lfv v9[e9],$00(a0) lfv v10[e10],$00(a0) lfv v11[e11],$00(a0) lfv v12[e12],$00(a0) lfv v13[e13],$00(a0) lfv v14[e14],$00(a0) lfv v15[e15],$00(a0) sqv v0[e0],$00(a1) sqv v1[e0],$10(a1) sqv v2[e0],$20(a1) sqv v3[e0],$30(a1) sqv v4[e0],$40(a1) sqv v5[e0],$50(a1) sqv v6[e0],$60(a1) sqv v7[e0],$70(a1) sqv v8[e0],$80(a1) sqv v9[e0],$90(a1) sqv v10[e0],$A0(a1) sqv v11[e0],$B0(a1) sqv v12[e0],$C0(a1) sqv v13[e0],$D0(a1) sqv v14[e0],$E0(a1) sqv v15[e0],$F0(a1) li a0,$0 lqv v0[e0],$00(a0) // input: v0 vxor v1,v1 vxor v2,v2 vxor v3,v3 add a1,t4 // add offset to disalign addi a2,a1,$1F0 sfv v0[e15],$00(a2) addi a2,a1,$1E0 sfv v0[e14],$00(a2) addi a2,a1,$1D0 sfv v0[e13],$00(a2) addi a2,a1,$1C0 sfv v0[e12],$00(a2) addi a2,a1,$1B0 sfv v0[e11],$00(a2) addi a2,a1,$1A0 sfv v0[e10],$00(a2) addi a2,a1,$190 sfv v0[e9],$00(a2) addi a2,a1,$180 sfv v0[e8],$00(a2) addi a2,a1,$170 sfv v0[e7],$00(a2) addi a2,a1,$160 sfv v0[e6],$00(a2) addi a2,a1,$150 sfv v0[e5],$00(a2) addi a2,a1,$140 sfv v0[e4],$00(a2) addi a2,a1,$130 sfv v0[e3],$00(a2) addi a2,a1,$120 sfv v0[e2],$00(a2) addi a2,a1,$110 sfv v0[e1],$00(a2) addi a2,a1,$100 sfv v0[e0],$00(a2) break """ # e0 = L0 >> 7 | L1 >> 7 | L2 >> 7 | L3 >> 7 # e1 = L6 >> 7 | L7 >> 7 | L4 >> 7 | L5 >> 7 # e2 = 0 # e3 = 0 # e4 = L1 >> 7 | L2 >> 7 | L3 >> 7 | L4 >> 7 # e5 # e6 # e7 # e8 = L4 >> 7 | L5 >> 7 | L6 >> 7 | L7 >> 7 # sfv_e0: 22aaaaaa 66aaaaaa aaaaaaaa efaaaaaa # sfv_e4: 66aaaaaa aaaaaaaa efaaaaaa 22aaaaaa # sfv_e8: 33aaaaaa 77aaaaaa 28aaaaaa 8baaaaaa # sfv_e12: 77aaaaaa 28aaaaaa 8baaaaaa 33aaaaaa [[test]] name = "offset0" input = [ 0x1122_3344, 0x5566_7788, 0x99AA_BBCC, 0x147F_45FE, # v0 0xAAAA_AAAA, 0xAAAA_AAAA, 0xAAAA_AAAA, 0xAAAA_AAAA, # fill 0, # offset 0, # dummy ] [[test]] name = "offset1" input = [ 0x1122_3344, 0x5566_7788, 0x99AA_BBCC, 0xDDEE_FFAB, # v0 0xAAAA_AAAA, 0xAAAA_AAAA, 0xAAAA_AAAA, 0xAAAA_AAAA, # fill 1, # offset 0, # dummy ] [[test]] name = "offset2" input = [ 0x1122_3344, 0x5566_7788, 0x99AA_BBCC, 0xDDEE_FFAB, # v0 0xAAAA_AAAA, 0xAAAA_AAAA, 0xAAAA_AAAA, 0xAAAA_AAAA, # fill 2, # offset 0, # dummy ] [[test]] name = "offset3" input = [ 0x1122_3344, 0x5566_7788, 0x99AA_BBCC, 0xDDEE_FFAB, # v0 0xAAAA_AAAA, 0xAAAA_AAAA, 0xAAAA_AAAA, 0xAAAA_AAAA, # fill 3, # offset 0, # dummy ] [[test]] name = "offset4" input = [ 0x1122_3344, 0x5566_7788, 0x99AA_BBCC, 0xDDEE_FFAB, # v0 0xAAAA_AAAA, 0xAAAA_AAAA, 0xAAAA_AAAA, 0xAAAA_AAAA, # fill 4, # offset 0, # dummy ] [[test]] name = "offset5" input = [ 0x1122_3344, 0x5566_7788, 0x99AA_BBCC, 0xDDEE_FFAB, # v0 0xAAAA_AAAA, 0xAAAA_AAAA, 0xAAAA_AAAA, 0xAAAA_AAAA, # fill 5, # offset 0, # dummy ] [[test]] name = "offset6" input = [ 0x1122_3344, 0x5566_7788, 0x99AA_BBCC, 0xDDEE_FFAB, # v0 0xAAAA_AAAA, 0xAAAA_AAAA, 0xAAAA_AAAA, 0xAAAA_AAAA, # fill 6, # offset 0, # dummy ] [[test]] name = "offset7" input = [ 0x1122_3344, 0x5566_7788, 0x99AA_BBCC, 0xDDEE_FFAB, # v0 0xAAAA_AAAA, 0xAAAA_AAAA, 0xAAAA_AAAA, 0xAAAA_AAAA, # fill 7, # offset 0, # dummy ] [[test]] name = "offset8" input = [ 0x1122_3344, 0x5566_7788, 0x99AA_BBCC, 0xDDEE_FFAB, # v0 0xAAAA_AAAA, 0xAAAA_AAAA, 0xAAAA_AAAA, 0xAAAA_AAAA, # fill 8, # offset 0, # dummy ] [[test]] name = "offset9" input = [ 0x1122_3344, 0x5566_7788, 0x99AA_BBCC, 0xDDEE_FFAB, # v0 0xAAAA_AAAA, 0xAAAA_AAAA, 0xAAAA_AAAA, 0xAAAA_AAAA, # fill 9, # offset 0, # dummy ] [[test]] name = "offset10" input = [ 0x1122_3344, 0x5566_7788, 0x99AA_BBCC, 0xDDEE_FFAB, # v0 0xAAAA_AAAA, 0xAAAA_AAAA, 0xAAAA_AAAA, 0xAAAA_AAAA, # fill 10, # offset 0, # dummy ] [[test]] name = "offset11" input = [ 0x1122_3344, 0x5566_7788, 0x99AA_BBCC, 0xDDEE_FFAB, # v0 0xAAAA_AAAA, 0xAAAA_AAAA, 0xAAAA_AAAA, 0xAAAA_AAAA, # fill 11, # offset 0, # dummy ] [[test]] name = "offset12" input = [ 0x1122_3344, 0x5566_7788, 0x99AA_BBCC, 0xDDEE_FFAB, # v0 0xAAAA_AAAA, 0xAAAA_AAAA, 0xAAAA_AAAA, 0xAAAA_AAAA, # fill 12, # offset 0, # dummy ] [[test]] name = "offset13" input = [ 0x1122_3344, 0x5566_7788, 0x99AA_BBCC, 0xDDEE_FFAB, # v0 0xAAAA_AAAA, 0xAAAA_AAAA, 0xAAAA_AAAA, 0xAAAA_AAAA, # fill 13, # offset 0, # dummy ] [[test]] name = "offset14" input = [ 0x1122_3344, 0x5566_7788, 0x99AA_BBCC, 0xDDEE_FFAB, # v0 0xAAAA_AAAA, 0xAAAA_AAAA, 0xAAAA_AAAA, 0xAAAA_AAAA, # fill 14, # offset 0, # dummy ] [[test]] name = "offset15" input = [ 0x1122_3344, 0x5566_7788, 0x99AA_BBCC, 0xDDEE_FFAB, # v0 0xAAAA_AAAA, 0xAAAA_AAAA, 0xAAAA_AAAA, 0xAAAA_AAAA, # fill 15, # offset 0, # dummy ]