# ARMv8 tests to test neon register # lists syntax. .text .arch armv8-a # Post-index multiple elements .macro ldst1_reg_list_post_imm_64 inst type \inst\()1 {v0.\type}, [x0], #8 \inst\()1 {v0.\type, v1.\type}, [x0], #16 \inst\()1 {v0.\type, v1.\type, v2.\type}, [x0], #24 \inst\()1 {v0.\type, v1.\type, v2.\type, v3.\type}, [x0], #32 .endm .irp instr ld,st .irp bits_64 8b, 4h, 2s, 1d ldst1_reg_list_post_imm_64 \instr \bits_64 .endr .endr .macro ldst1_reg_list_post_imm_128 inst type \inst\()1 {v0.\type}, [x0], #16 \inst\()1 {v0.\type, v1.\type}, [x0], #32 \inst\()1 {v0.\type, v1.\type, v2.\type}, [x0], #48 \inst\()1 {v0.\type, v1.\type, v2.\type, v3.\type}, [x0], #64 .endm .irp instr ld,st .irp bits_128 16b, 8h, 4s, 2d ldst1_reg_list_post_imm_128 \instr \bits_128 .endr .endr .macro ldst1_reg_list_post_reg inst type postreg \inst\()1 {v0.\type}, [x0], \postreg \inst\()1 {v0.\type, v1.\type}, [x0], \postreg \inst\()1 {v0.\type, v1.\type, v2.\type}, [x0], \postreg \inst\()1 {v0.\type, v1.\type, v2.\type, v3.\type}, [x0], \postreg .endm .irp instr ld,st .irp bits 8b, 4h, 2s, 1d, 16b, 8h, 4s, 2d ldst1_reg_list_post_reg \instr \bits x7 .endr .endr .macro ldst2_reg_list_post_imm_reg_64 inst type postreg \inst\()2 {v0.\type, v1.\type}, [x0], #16 .ifnb \postreg \inst\()2 {v0.\type, v1.\type}, [x0], \postreg .endif .endm .macro ldst2_reg_list_post_imm_reg_128 inst type postreg \inst\()2 {v0.\type, v1.\type}, [x0], #32 .ifnb \postreg \inst\()2 {v0.\type, v1.\type}, [x0], \postreg .endif .endm .irp instr ld,st .irp bits_64 8b, 4h, 2s ldst2_reg_list_post_imm_reg_64 \instr \bits_64 x7 .endr .endr .irp instr ld,st .irp bits_128 16b, 8h, 4s, 2d ldst2_reg_list_post_imm_reg_128 \instr \bits_128 x7 .endr .endr .macro ldst34_reg_list_post_imm_reg_64 inst type postreg \inst\()3 {v0.\type, v1.\type, v2.\type}, [x0], #24 \inst\()4 {v0.\type, v1.\type, v2.\type, v3.\type}, [x0], #32 \inst\()3 {v0.\type, v1.\type, v2.\type}, [x0], \postreg \inst\()4 {v0.\type, v1.\type, v2.\type, v3.\type}, [x0], \postreg .endm .macro ldst34_reg_list_post_imm_reg_128 inst type postreg \inst\()3 {v0.\type, v1.\type, v2.\type}, [x0], #48 \inst\()4 {v0.\type, v1.\type, v2.\type, v3.\type}, [x0], #64 \inst\()3 {v0.\type, v1.\type, v2.\type}, [x0], \postreg \inst\()4 {v0.\type, v1.\type, v2.\type, v3.\type}, [x0], \postreg .endm .irp instr ld,st .irp bits_64 8b, 4h, 2s ldst34_reg_list_post_imm_reg_64 \instr \bits_64 x7 .endr .endr .irp instr ld,st .irp bits_128 16b, 8h, 4s, 2d ldst34_reg_list_post_imm_reg_128 \instr \bits_128 x7 .endr .endr # Post Index Vector-element form with replicate (Immediate offset) # Consecutive registers in reg list .macro ldstn_index_rep_B_imm inst index type rep \inst\()1\rep {v0.\type}\index, [x0], #1 \inst\()2\rep {v0.\type, v1.\type}\index, [x0], #2 \inst\()3\rep {v0.\type, v1.\type, v2.\type}\index, [x0], #3 \inst\()4\rep {v0.\type, v1.\type, v2.\type, v3.\type}\index, [x0], #4 .endm # Vector element with index .irp instr, ld, st ldstn_index_rep_B_imm \instr index="[1]" type=b rep="" .ifnc \instr, st .irp types 8b, 16b ldstn_index_rep_B_imm \instr index="" type=\types rep="r" .endr .endif .endr .macro ldstn_index_rep_H_imm inst index type rep \inst\()1\rep {v0.\type}\index, [x0], #2 \inst\()2\rep {v0.\type, v1.\type}\index, [x0], #4 \inst\()3\rep {v0.\type, v1.\type, v2.\type}\index, [x0], #6 \inst\()4\rep {v0.\type, v1.\type, v2.\type, v3.\type}\index, [x0], #8 .endm .irp instr, ld, st ldstn_index_rep_H_imm \instr index="[1]" type=h rep="" .ifnc \instr, st .irp types 4h, 8h ldstn_index_rep_H_imm \instr index="" type=\types rep="r" .endr .endif .endr .macro ldstn_index_rep_S_imm inst index type rep \inst\()1\rep {v0.\type}\index, [x0], #4 \inst\()2\rep {v0.\type, v1.\type}\index, [x0], #8 \inst\()3\rep {v0.\type, v1.\type, v2.\type}\index, [x0], #12 \inst\()4\rep {v0.\type, v1.\type, v2.\type, v3.\type}\index, [x0], #16 .endm .irp instr, ld, st ldstn_index_rep_S_imm \instr index="[1]" type=s rep="" .ifnc \instr, st .irp types 2s, 4s ldstn_index_rep_S_imm \instr index="" type=\types rep="r" .endr .endif .endr .macro ldstn_index_rep_D_imm inst index type rep \inst\()1\rep {v0.\type}\index, [x0], #8 \inst\()2\rep {v0.\type, v1.\type}\index, [x0], #16 \inst\()3\rep {v0.\type, v1.\type, v2.\type}\index, [x0], #24 \inst\()4\rep {v0.\type, v1.\type, v2.\type, v3.\type}\index, [x0], #32 .endm .irp instr, ld, st ldstn_index_rep_D_imm \instr index="[1]" type=d rep="" .ifnc \instr, st .irp types 1d, 2d ldstn_index_rep_D_imm \instr index="" type=\types rep="r" .endr .endif .endr # Post Index Vector-element form with replicate (Register offset) # This could have been factored into Post-index multiple # element macros but this would make this already-looking-complex # testcase look more complex! # Consecutive registers in reg list .macro ldstn_index_rep_reg inst index type rep postreg \inst\()1\rep {v0.\type}\index, [x0], \postreg \inst\()2\rep {v0.\type, v1.\type}\index, [x0], \postreg \inst\()3\rep {v0.\type, v1.\type, v2.\type}\index, [x0], \postreg \inst\()4\rep {v0.\type, v1.\type, v2.\type, v3.\type}\index, [x0], \postreg .endm .irp instr, ld, st .irp itypes b,h,s,d ldstn_index_rep_reg \instr index="[1]" type=\itypes rep="" postreg=x7 .endr .ifnc \instr, st .irp types 8b, 16b, 4h, 8h, 2s, 4s, 1d, 2d ldstn_index_rep_reg \instr index="" type=\types rep="r" postreg=x7 .endr .endif .endr # ### End of test