diff --git a/gas/ChangeLog b/gas/ChangeLog index 441dc2297d2..3d032f2236f 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,11 @@ +2017-11-09 Tamar Christina + + * gas/testsuite/gas/aarch64/armv8_4-a-registers-illegal.d: New. + * gas/testsuite/gas/aarch64/armv8_4-a-registers-illegal.l: New. + * gas/testsuite/gas/aarch64/armv8_4-a-registers-illegal.s: New. + * gas/testsuite/gas/aarch64/armv8_4-a-registers.d: New. + * gas/testsuite/gas/aarch64/armv8_4-a-registers.s: New. + 2017-11-09 Tamar Christina * config/tc-aarch64.c (process_omitted_operand): diff --git a/gas/testsuite/gas/aarch64/armv8_4-a-registers-illegal.d b/gas/testsuite/gas/aarch64/armv8_4-a-registers-illegal.d new file mode 100644 index 00000000000..098552b25f4 --- /dev/null +++ b/gas/testsuite/gas/aarch64/armv8_4-a-registers-illegal.d @@ -0,0 +1,3 @@ +#as: -march=armv8.4-a+crypto+sm4+sha3 +#source: armv8_4-a-registers-illegal.s +#error-output: armv8_4-a-registers-illegal.l diff --git a/gas/testsuite/gas/aarch64/armv8_4-a-registers-illegal.l b/gas/testsuite/gas/aarch64/armv8_4-a-registers-illegal.l new file mode 100644 index 00000000000..41373f72b33 --- /dev/null +++ b/gas/testsuite/gas/aarch64/armv8_4-a-registers-illegal.l @@ -0,0 +1,178 @@ +[^:]+: Assembler messages: +[^:]+:[0-9]+: Error: operand mismatch -- `mrs W0,VSTTBR_EL2' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: mrs x0, vsttbr_el2 +[^:]+:[0-9]+: Error: operand mismatch -- `mrs W0,VSTCR_EL2' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: mrs x0, vstcr_el2 +[^:]+:[0-9]+: Error: operand mismatch -- `mrs W0,CNTP_TVAL_EL0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: mrs x0, cntp_tval_el0 +[^:]+:[0-9]+: Error: operand mismatch -- `mrs W0,CNTP_CTL_EL0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: mrs x0, cntp_ctl_el0 +[^:]+:[0-9]+: Error: operand mismatch -- `mrs W0,CNTP_CVAL_EL0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: mrs x0, cntp_cval_el0 +[^:]+:[0-9]+: Error: operand mismatch -- `mrs W0,CNTV_TVAL_EL0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: mrs x0, cntv_tval_el0 +[^:]+:[0-9]+: Error: operand mismatch -- `mrs W0,CNTV_CTL_EL0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: mrs x0, cntv_ctl_el0 +[^:]+:[0-9]+: Error: operand mismatch -- `mrs W0,CNTV_CVAL_EL0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: mrs x0, cntv_cval_el0 +[^:]+:[0-9]+: Error: operand mismatch -- `mrs W0,CNTHVS_TVAL_EL2' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: mrs x0, cnthvs_tval_el2 +[^:]+:[0-9]+: Error: operand mismatch -- `mrs W0,CNTHVS_CVAL_EL2' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: mrs x0, cnthvs_cval_el2 +[^:]+:[0-9]+: Error: operand mismatch -- `mrs W0,CNTHVS_CTL_EL2' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: mrs x0, cnthvs_ctl_el2 +[^:]+:[0-9]+: Error: operand mismatch -- `mrs W0,CNTHPS_TVAL_EL2' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: mrs x0, cnthps_tval_el2 +[^:]+:[0-9]+: Error: operand mismatch -- `mrs W0,CNTHPS_CVAL_EL2' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: mrs x0, cnthps_cval_el2 +[^:]+:[0-9]+: Error: operand mismatch -- `mrs W0,CNTHPS_CTL_EL2' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: mrs x0, cnthps_ctl_el2 +[^:]+:[0-9]+: Error: operand mismatch -- `mrs W0,SDER32_EL2' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: mrs x0, sder32_el2 +[^:]+:[0-9]+: Error: operand mismatch -- `mrs W0,VNCR_EL2' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: mrs x0, vncr_el2 +[^:]+:[0-9]+: Error: operand mismatch -- `msr DIT,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: msr dit, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `mrs W0,DIT' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: mrs x0, dit +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi VAE1OS,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi vae1os, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi ASIDE1OS,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi aside1os, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi VAAE1OS,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi vaae1os, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi VALE1OS,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi vale1os, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi VAALE1OS,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi vaale1os, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi IPAS2E1OS,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi ipas2e1os, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi IPAS2LE1OS,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi ipas2le1os, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi VAE2OS,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi vae2os, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi VALE2OS,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi vale2os, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi VAE3OS,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi vae3os, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi VALE3OS,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi vale3os, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi RVAE1,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi rvae1, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi RVAAE1,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi rvaae1, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi RVALE1,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi rvale1, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi RVAALE1,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi rvaale1, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi RVAE1IS,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi rvae1is, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi RVAAE1IS,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi rvaae1is, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi RVALE1IS,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi rvale1is, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi RVAALE1IS,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi rvaale1is, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi RVAE1OS,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi rvae1os, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi RVAAE1OS,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi rvaae1os, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi RVALE1OS,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi rvale1os, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi RVAALE1OS,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi rvaale1os, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi RIPAS2E1IS,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi ripas2e1is, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi RIPAS2LE1IS,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi ripas2le1is, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi RIPAS2E1,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi ripas2e1, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi RIPAS2LE1,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi ripas2le1, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi RIPAS2E1OS,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi ripas2e1os, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi RIPAS2LE1OS,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi ripas2le1os, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi RVAE2,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi rvae2, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi RVALE2,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi rvale2, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi RVAE2IS,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi rvae2is, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi RVALE2IS,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi rvale2is, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi RVAE2OS,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi rvae2os, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi RVALE2OS,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi rvale2os, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi RVAE3,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi rvae3, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi RVALE3,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi rvale3, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi RVAE3IS,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi rvae3is, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi RVALE3IS,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi rvale3is, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi RVAE3OS,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi rvae3os, x0 +[^:]+:[0-9]+: Error: operand mismatch -- `tlbi RVALE3OS,W0' +[^:]+:[0-9]+: Info: did you mean this\? +[^:]+:[0-9]+: Info: tlbi rvale3os, x0 diff --git a/gas/testsuite/gas/aarch64/armv8_4-a-registers-illegal.s b/gas/testsuite/gas/aarch64/armv8_4-a-registers-illegal.s new file mode 100644 index 00000000000..d31fff23f07 --- /dev/null +++ b/gas/testsuite/gas/aarch64/armv8_4-a-registers-illegal.s @@ -0,0 +1,80 @@ +# Secure second stage +MRS W0, VSTTBR_EL2 +MRS W0, VSTCR_EL2 + +# Timer changes +MRS W0, CNTP_TVAL_EL0 +MRS W0, CNTP_CTL_EL0 +MRS W0, CNTP_CVAL_EL0 +MRS W0, CNTV_TVAL_EL0 +MRS W0, CNTV_CTL_EL0 +MRS W0, CNTV_CVAL_EL0 + +MRS W0, CNTHVS_TVAL_EL2 +MRS W0, CNTHVS_CVAL_EL2 +MRS W0, CNTHVS_CTL_EL2 +MRS W0, CNTHPS_TVAL_EL2 +MRS W0, CNTHPS_CVAL_EL2 +MRS W0, CNTHPS_CTL_EL2 + +# Debug state +MRS W0, SDER32_EL2 + +# Nested Virtualization +MRS W0, VNCR_EL2 + +# PSTATE +MSR DIT, #01 +MSR DIT, W0 +MRS W0, DIT + +# TLB Maintenance instructions +TLBI VMALLE1OS +TLBI VAE1OS, W0 +TLBI ASIDE1OS, W0 +TLBI VAAE1OS, W0 +TLBI VALE1OS, W0 +TLBI VAALE1OS, W0 +TLBI IPAS2E1OS, W0 +TLBI IPAS2LE1OS, W0 +TLBI VAE2OS, W0 +TLBI VALE2OS, W0 +TLBI VMALLS12E1OS +TLBI VAE3OS, W0 +TLBI VALE3OS, W0 +TLBI ALLE2OS +TLBI ALLE1OS +TLBI ALLE3OS + +# TLB Range Maintenance Instructions +TLBI RVAE1, W0 +TLBI RVAAE1, W0 +TLBI RVALE1, W0 +TLBI RVAALE1, W0 +TLBI RVAE1IS, W0 +TLBI RVAAE1IS, W0 +TLBI RVALE1IS, W0 +TLBI RVAALE1IS, W0 +TLBI RVAE1OS, W0 +TLBI RVAAE1OS, W0 +TLBI RVALE1OS, W0 +TLBI RVAALE1OS, W0 +TLBI RIPAS2E1IS, W0 +TLBI RIPAS2LE1IS, W0 +TLBI RIPAS2E1, W0 +TLBI RIPAS2LE1, W0 +TLBI RIPAS2E1OS, W0 +TLBI RIPAS2LE1OS, W0 +TLBI RVAE2, W0 +TLBI RVALE2, W0 +TLBI RVAE2IS, W0 +TLBI RVALE2IS, W0 +TLBI RVAE2OS, W0 +TLBI RVALE2OS, W0 +TLBI RVAE3, W0 +TLBI RVALE3, W0 +TLBI RVAE3IS, W0 +TLBI RVALE3IS, W0 +TLBI RVAE3OS, W0 +TLBI RVALE3OS, W0 + diff --git a/gas/testsuite/gas/aarch64/armv8_4-a-registers.d b/gas/testsuite/gas/aarch64/armv8_4-a-registers.d new file mode 100644 index 00000000000..f643c8905a1 --- /dev/null +++ b/gas/testsuite/gas/aarch64/armv8_4-a-registers.d @@ -0,0 +1,192 @@ +#as: -march=armv8.4-a +#objdump: -dr + +.*: file format .* + +Disassembly of section \.text: + +0+ <.*>: +[^:]+:\s+d53c2603 mrs x3, vsttbr_el2 +[^:]+:\s+d53c260b mrs x11, vsttbr_el2 +[^:]+:\s+d53c260f mrs x15, vsttbr_el2 +[^:]+:\s+d53c2643 mrs x3, vstcr_el2 +[^:]+:\s+d53c264b mrs x11, vstcr_el2 +[^:]+:\s+d53c264f mrs x15, vstcr_el2 +[^:]+:\s+d53be203 mrs x3, cntp_tval_el0 +[^:]+:\s+d53be20b mrs x11, cntp_tval_el0 +[^:]+:\s+d53be20f mrs x15, cntp_tval_el0 +[^:]+:\s+d53be223 mrs x3, cntp_ctl_el0 +[^:]+:\s+d53be22b mrs x11, cntp_ctl_el0 +[^:]+:\s+d53be22f mrs x15, cntp_ctl_el0 +[^:]+:\s+d53be243 mrs x3, cntp_cval_el0 +[^:]+:\s+d53be24b mrs x11, cntp_cval_el0 +[^:]+:\s+d53be24f mrs x15, cntp_cval_el0 +[^:]+:\s+d53be303 mrs x3, cntv_tval_el0 +[^:]+:\s+d53be30b mrs x11, cntv_tval_el0 +[^:]+:\s+d53be30f mrs x15, cntv_tval_el0 +[^:]+:\s+d53be323 mrs x3, cntv_ctl_el0 +[^:]+:\s+d53be32b mrs x11, cntv_ctl_el0 +[^:]+:\s+d53be32f mrs x15, cntv_ctl_el0 +[^:]+:\s+d53be343 mrs x3, cntv_cval_el0 +[^:]+:\s+d53be34b mrs x11, cntv_cval_el0 +[^:]+:\s+d53be34f mrs x15, cntv_cval_el0 +[^:]+:\s+d53ce403 mrs x3, cnthvs_tval_el2 +[^:]+:\s+d53ce40b mrs x11, cnthvs_tval_el2 +[^:]+:\s+d53ce40f mrs x15, cnthvs_tval_el2 +[^:]+:\s+d53ce443 mrs x3, cnthvs_cval_el2 +[^:]+:\s+d53ce44b mrs x11, cnthvs_cval_el2 +[^:]+:\s+d53ce44f mrs x15, cnthvs_cval_el2 +[^:]+:\s+d53ce423 mrs x3, cnthvs_ctl_el2 +[^:]+:\s+d53ce42b mrs x11, cnthvs_ctl_el2 +[^:]+:\s+d53ce42f mrs x15, cnthvs_ctl_el2 +[^:]+:\s+d53ce503 mrs x3, cnthps_tval_el2 +[^:]+:\s+d53ce50b mrs x11, cnthps_tval_el2 +[^:]+:\s+d53ce50f mrs x15, cnthps_tval_el2 +[^:]+:\s+d53ce543 mrs x3, cnthps_cval_el2 +[^:]+:\s+d53ce54b mrs x11, cnthps_cval_el2 +[^:]+:\s+d53ce54f mrs x15, cnthps_cval_el2 +[^:]+:\s+d53ce523 mrs x3, cnthps_ctl_el2 +[^:]+:\s+d53ce52b mrs x11, cnthps_ctl_el2 +[^:]+:\s+d53ce52f mrs x15, cnthps_ctl_el2 +[^:]+:\s+d53c1323 mrs x3, sder32_el2 +[^:]+:\s+d53c132b mrs x11, sder32_el2 +[^:]+:\s+d53c132f mrs x15, sder32_el2 +[^:]+:\s+d53c2203 mrs x3, vncr_el2 +[^:]+:\s+d53c220b mrs x11, vncr_el2 +[^:]+:\s+d53c220f mrs x15, vncr_el2 +[^:]+:\s+d503415f msr dit, #0x1 +[^:]+:\s+d503405f msr dit, #0x0 +[^:]+:\s+d51b42a3 msr dit, x3 +[^:]+:\s+d51b42ab msr dit, x11 +[^:]+:\s+d51b42af msr dit, x15 +[^:]+:\s+d53b42a3 mrs x3, dit +[^:]+:\s+d53b42ab mrs x11, dit +[^:]+:\s+d53b42af mrs x15, dit +[^:]+:\s+d508811f tlbi vmalle1os +[^:]+:\s+d50c811f tlbi alle2os +[^:]+:\s+d50c819f tlbi alle1os +[^:]+:\s+d50e811f tlbi alle3os +[^:]+:\s+d50c81df tlbi vmalls12e1os +[^:]+:\s+d5088123 tlbi vae1os, x3 +[^:]+:\s+d508812b tlbi vae1os, x11 +[^:]+:\s+d508812f tlbi vae1os, x15 +[^:]+:\s+d5088143 tlbi aside1os, x3 +[^:]+:\s+d508814b tlbi aside1os, x11 +[^:]+:\s+d508814f tlbi aside1os, x15 +[^:]+:\s+d5088163 tlbi vaae1os, x3 +[^:]+:\s+d508816b tlbi vaae1os, x11 +[^:]+:\s+d508816f tlbi vaae1os, x15 +[^:]+:\s+d50881a3 tlbi vale1os, x3 +[^:]+:\s+d50881ab tlbi vale1os, x11 +[^:]+:\s+d50881af tlbi vale1os, x15 +[^:]+:\s+d50881e3 tlbi vaale1os, x3 +[^:]+:\s+d50881eb tlbi vaale1os, x11 +[^:]+:\s+d50881ef tlbi vaale1os, x15 +[^:]+:\s+d50c8403 tlbi ipas2e1os, x3 +[^:]+:\s+d50c840b tlbi ipas2e1os, x11 +[^:]+:\s+d50c840f tlbi ipas2e1os, x15 +[^:]+:\s+d50c8483 tlbi ipas2le1os, x3 +[^:]+:\s+d50c848b tlbi ipas2le1os, x11 +[^:]+:\s+d50c848f tlbi ipas2le1os, x15 +[^:]+:\s+d50c8123 tlbi vae2os, x3 +[^:]+:\s+d50c812b tlbi vae2os, x11 +[^:]+:\s+d50c812f tlbi vae2os, x15 +[^:]+:\s+d50c81a3 tlbi vale2os, x3 +[^:]+:\s+d50c81ab tlbi vale2os, x11 +[^:]+:\s+d50c81af tlbi vale2os, x15 +[^:]+:\s+d50e8123 tlbi vae3os, x3 +[^:]+:\s+d50e812b tlbi vae3os, x11 +[^:]+:\s+d50e812f tlbi vae3os, x15 +[^:]+:\s+d50e81a3 tlbi vale3os, x3 +[^:]+:\s+d50e81ab tlbi vale3os, x11 +[^:]+:\s+d50e81af tlbi vale3os, x15 +[^:]+:\s+d5088623 tlbi rvae1, x3 +[^:]+:\s+d508862b tlbi rvae1, x11 +[^:]+:\s+d508862f tlbi rvae1, x15 +[^:]+:\s+d5088663 tlbi rvaae1, x3 +[^:]+:\s+d508866b tlbi rvaae1, x11 +[^:]+:\s+d508866f tlbi rvaae1, x15 +[^:]+:\s+d50886a3 tlbi rvale1, x3 +[^:]+:\s+d50886ab tlbi rvale1, x11 +[^:]+:\s+d50886af tlbi rvale1, x15 +[^:]+:\s+d50886e3 tlbi rvaale1, x3 +[^:]+:\s+d50886eb tlbi rvaale1, x11 +[^:]+:\s+d50886ef tlbi rvaale1, x15 +[^:]+:\s+d5088223 tlbi rvae1is, x3 +[^:]+:\s+d508822b tlbi rvae1is, x11 +[^:]+:\s+d508822f tlbi rvae1is, x15 +[^:]+:\s+d5088263 tlbi rvaae1is, x3 +[^:]+:\s+d508826b tlbi rvaae1is, x11 +[^:]+:\s+d508826f tlbi rvaae1is, x15 +[^:]+:\s+d50882a3 tlbi rvale1is, x3 +[^:]+:\s+d50882ab tlbi rvale1is, x11 +[^:]+:\s+d50882af tlbi rvale1is, x15 +[^:]+:\s+d50882e3 tlbi rvaale1is, x3 +[^:]+:\s+d50882eb tlbi rvaale1is, x11 +[^:]+:\s+d50882ef tlbi rvaale1is, x15 +[^:]+:\s+d5088523 tlbi rvae1os, x3 +[^:]+:\s+d508852b tlbi rvae1os, x11 +[^:]+:\s+d508852f tlbi rvae1os, x15 +[^:]+:\s+d5088563 tlbi rvaae1os, x3 +[^:]+:\s+d508856b tlbi rvaae1os, x11 +[^:]+:\s+d508856f tlbi rvaae1os, x15 +[^:]+:\s+d50885a3 tlbi rvale1os, x3 +[^:]+:\s+d50885ab tlbi rvale1os, x11 +[^:]+:\s+d50885af tlbi rvale1os, x15 +[^:]+:\s+d50885e3 tlbi rvaale1os, x3 +[^:]+:\s+d50885eb tlbi rvaale1os, x11 +[^:]+:\s+d50885ef tlbi rvaale1os, x15 +[^:]+:\s+d50c8043 tlbi ripas2e1is, x3 +[^:]+:\s+d50c804b tlbi ripas2e1is, x11 +[^:]+:\s+d50c804f tlbi ripas2e1is, x15 +[^:]+:\s+d50c80c3 tlbi ripas2le1is, x3 +[^:]+:\s+d50c80cb tlbi ripas2le1is, x11 +[^:]+:\s+d50c80cf tlbi ripas2le1is, x15 +[^:]+:\s+d50c8443 tlbi ripas2e1, x3 +[^:]+:\s+d50c844b tlbi ripas2e1, x11 +[^:]+:\s+d50c844f tlbi ripas2e1, x15 +[^:]+:\s+d50c84c3 tlbi ripas2le1, x3 +[^:]+:\s+d50c84cb tlbi ripas2le1, x11 +[^:]+:\s+d50c84cf tlbi ripas2le1, x15 +[^:]+:\s+d50c8463 tlbi ripas2e1os, x3 +[^:]+:\s+d50c846b tlbi ripas2e1os, x11 +[^:]+:\s+d50c846f tlbi ripas2e1os, x15 +[^:]+:\s+d50c84e3 tlbi ripas2le1os, x3 +[^:]+:\s+d50c84eb tlbi ripas2le1os, x11 +[^:]+:\s+d50c84ef tlbi ripas2le1os, x15 +[^:]+:\s+d50c8623 tlbi rvae2, x3 +[^:]+:\s+d50c862b tlbi rvae2, x11 +[^:]+:\s+d50c862f tlbi rvae2, x15 +[^:]+:\s+d50c86a3 tlbi rvale2, x3 +[^:]+:\s+d50c86ab tlbi rvale2, x11 +[^:]+:\s+d50c86af tlbi rvale2, x15 +[^:]+:\s+d50c8223 tlbi rvae2is, x3 +[^:]+:\s+d50c822b tlbi rvae2is, x11 +[^:]+:\s+d50c822f tlbi rvae2is, x15 +[^:]+:\s+d50c82a3 tlbi rvale2is, x3 +[^:]+:\s+d50c82ab tlbi rvale2is, x11 +[^:]+:\s+d50c82af tlbi rvale2is, x15 +[^:]+:\s+d50c8523 tlbi rvae2os, x3 +[^:]+:\s+d50c852b tlbi rvae2os, x11 +[^:]+:\s+d50c852f tlbi rvae2os, x15 +[^:]+:\s+d50c85a3 tlbi rvale2os, x3 +[^:]+:\s+d50c85ab tlbi rvale2os, x11 +[^:]+:\s+d50c85af tlbi rvale2os, x15 +[^:]+:\s+d50e8623 tlbi rvae3, x3 +[^:]+:\s+d50e862b tlbi rvae3, x11 +[^:]+:\s+d50e862f tlbi rvae3, x15 +[^:]+:\s+d50e86a3 tlbi rvale3, x3 +[^:]+:\s+d50e86ab tlbi rvale3, x11 +[^:]+:\s+d50e86af tlbi rvale3, x15 +[^:]+:\s+d50e8223 tlbi rvae3is, x3 +[^:]+:\s+d50e822b tlbi rvae3is, x11 +[^:]+:\s+d50e822f tlbi rvae3is, x15 +[^:]+:\s+d50e82a3 tlbi rvale3is, x3 +[^:]+:\s+d50e82ab tlbi rvale3is, x11 +[^:]+:\s+d50e82af tlbi rvale3is, x15 +[^:]+:\s+d50e8523 tlbi rvae3os, x3 +[^:]+:\s+d50e852b tlbi rvae3os, x11 +[^:]+:\s+d50e852f tlbi rvae3os, x15 +[^:]+:\s+d50e85a3 tlbi rvale3os, x3 +[^:]+:\s+d50e85ab tlbi rvale3os, x11 +[^:]+:\s+d50e85af tlbi rvale3os, x15 diff --git a/gas/testsuite/gas/aarch64/armv8_4-a-registers.s b/gas/testsuite/gas/aarch64/armv8_4-a-registers.s new file mode 100644 index 00000000000..b909b820740 --- /dev/null +++ b/gas/testsuite/gas/aarch64/armv8_4-a-registers.s @@ -0,0 +1,94 @@ + .macro gen_mrs reg + .irp m, 3, 11, 15 + MRS X\m, \reg + .endr + .endm + + .macro gen_tlbi reg + .irp m, 3, 11, 15 + TLBI \reg, X\m + .endr + .endm +func: + # Secure second stage + gen_mrs VSTTBR_EL2 + gen_mrs VSTCR_EL2 + + # Timer changes + gen_mrs CNTP_TVAL_EL0 + gen_mrs CNTP_CTL_EL0 + gen_mrs CNTP_CVAL_EL0 + gen_mrs CNTV_TVAL_EL0 + gen_mrs CNTV_CTL_EL0 + gen_mrs CNTV_CVAL_EL0 + + gen_mrs CNTHVS_TVAL_EL2 + gen_mrs CNTHVS_CVAL_EL2 + gen_mrs CNTHVS_CTL_EL2 + gen_mrs CNTHPS_TVAL_EL2 + gen_mrs CNTHPS_CVAL_EL2 + gen_mrs CNTHPS_CTL_EL2 + + # Debug state + gen_mrs SDER32_EL2 + + # Nested Virtualization + gen_mrs VNCR_EL2 + + # PSTATE + MSR DIT, #01 + MSR DIT, #00 + MSR DIT, X3 + MSR DIT, X11 + MSR DIT, X15 + gen_mrs DIT + + # TLB Maintenance instructions + TLBI VMALLE1OS + TLBI ALLE2OS + TLBI ALLE1OS + TLBI ALLE3OS + TLBI VMALLS12E1OS + gen_tlbi VAE1OS + gen_tlbi ASIDE1OS + gen_tlbi VAAE1OS + gen_tlbi VALE1OS + gen_tlbi VAALE1OS + gen_tlbi IPAS2E1OS + gen_tlbi IPAS2LE1OS + gen_tlbi VAE2OS + gen_tlbi VALE2OS + gen_tlbi VAE3OS + gen_tlbi VALE3OS + + # TLB Range Maintenance Instructions + gen_tlbi RVAE1 + gen_tlbi RVAAE1 + gen_tlbi RVALE1 + gen_tlbi RVAALE1 + gen_tlbi RVAE1IS + gen_tlbi RVAAE1IS + gen_tlbi RVALE1IS + gen_tlbi RVAALE1IS + gen_tlbi RVAE1OS + gen_tlbi RVAAE1OS + gen_tlbi RVALE1OS + gen_tlbi RVAALE1OS + gen_tlbi RIPAS2E1IS + gen_tlbi RIPAS2LE1IS + gen_tlbi RIPAS2E1 + gen_tlbi RIPAS2LE1 + gen_tlbi RIPAS2E1OS + gen_tlbi RIPAS2LE1OS + gen_tlbi RVAE2 + gen_tlbi RVALE2 + gen_tlbi RVAE2IS + gen_tlbi RVALE2IS + gen_tlbi RVAE2OS + gen_tlbi RVALE2OS + gen_tlbi RVAE3 + gen_tlbi RVALE3 + gen_tlbi RVAE3IS + gen_tlbi RVALE3IS + gen_tlbi RVAE3OS + gen_tlbi RVALE3OS diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index 4056d884081..809cad3117c 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,20 @@ +2017-11-09 Tamar Christina + + * aarch64-opc.c (aarch64_sys_regs): Add ARMv8.4-a registers; + dit, vstcr_el2, vsttbr_el2, cnthvs_tval_el2, cnthvs_cval_el2, + cnthvs_ctl_el2, cnthps_tval_el2, cnthps_cval_el2, cnthps_ctl_el2, + sder32_el2, vncr_el2. + (aarch64_sys_reg_supported_p): Likewise. + (aarch64_pstatefields): Add dit register. + (aarch64_pstatefield_supported_p): Likewise. + (aarch64_sys_regs_tlbi): Add vmalle1os, vae1os, aside1os, vaae1os, + vale1os, vaale1os, ipas2e1os, ipas2le1os, vae2os, vale2os, vmalls12e1os, + vae3os, vale3os, alle2os, alle1os, alle3os, rvae1, rvaae1, rvale1, + rvaale1, rvae1is, rvaae1is, rvale1is, rvaale1is, rvae1os, rvaae1os, + rvale1os, rvaale1os, ripas2e1is, ripas2le1is, ripas2e1, ripas2le1, + ripas2e1os, ripas2le1os, rvae2, rvale2, rvae2is, rvale2is, rvae2os, + rvale2os, rvae3, rvale3, rvae3is, rvale3is, rvae3os, rvale3os. + 2017-11-09 Tamar Christina * aarch64-tbl.h (QL_SHA512UPT, QL_V2SAME2D, QL_V3SAME2D): New. diff --git a/opcodes/aarch64-opc.c b/opcodes/aarch64-opc.c index 44619062c90..96ca085d15b 100644 --- a/opcodes/aarch64-opc.c +++ b/opcodes/aarch64-opc.c @@ -2465,7 +2465,8 @@ operand_general_constraint_met_p (const aarch64_opnd_info *opnds, int idx, MSR PAN, #uimm4 The immediate must be #0 or #1. */ if ((opnd->pstatefield == 0x03 /* UAO. */ - || opnd->pstatefield == 0x04) /* PAN. */ + || opnd->pstatefield == 0x04 /* PAN. */ + || opnd->pstatefield == 0x1a) /* DIT. */ && opnds[1].imm.value > 1) { set_imm_out_of_range_error (mismatch_detail, idx, 0, 1); @@ -4031,6 +4032,18 @@ const aarch64_sys_reg aarch64_sys_regs [] = { "pmevtyper29_el0", CPENC(3,3,C14,C15,5), 0 }, { "pmevtyper30_el0", CPENC(3,3,C14,C15,6), 0 }, { "pmccfiltr_el0", CPENC(3,3,C14,C15,7), 0 }, + + { "dit", CPEN_ (3, C2, 5), F_ARCHEXT }, + { "vstcr_el2", CPENC(3, 4, C2, C6, 2), F_ARCHEXT }, + { "vsttbr_el2", CPENC(3, 4, C2, C6, 0), F_ARCHEXT }, + { "cnthvs_tval_el2", CPENC(3, 4, C14, C4, 0), F_ARCHEXT }, + { "cnthvs_cval_el2", CPENC(3, 4, C14, C4, 2), F_ARCHEXT }, + { "cnthvs_ctl_el2", CPENC(3, 4, C14, C4, 1), F_ARCHEXT }, + { "cnthps_tval_el2", CPENC(3, 4, C14, C5, 0), F_ARCHEXT }, + { "cnthps_cval_el2", CPENC(3, 4, C14, C5, 2), F_ARCHEXT }, + { "cnthps_ctl_el2", CPENC(3, 4, C14, C5, 1), F_ARCHEXT }, + { "sder32_el2", CPENC(3, 4, C1, C3, 1), F_ARCHEXT }, + { "vncr_el2", CPENC(3, 4, C2, C2, 0), F_ARCHEXT }, { 0, CPENC(0,0,0,0,0), 0 }, }; @@ -4168,9 +4181,87 @@ aarch64_sys_reg_supported_p (const aarch64_feature_set features, && !AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_SVE)) return FALSE; + /* ARMv8.4 features. */ + + /* PSTATE.DIT. */ + if (reg->value == CPEN_ (3, C2, 5) + && !AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_V8_4)) + return FALSE; + + /* Virtualization extensions. */ + if ((reg->value == CPENC(3, 4, C2, C6, 2) + || reg->value == CPENC(3, 4, C2, C6, 0) + || reg->value == CPENC(3, 4, C14, C4, 0) + || reg->value == CPENC(3, 4, C14, C4, 2) + || reg->value == CPENC(3, 4, C14, C4, 1) + || reg->value == CPENC(3, 4, C14, C5, 0) + || reg->value == CPENC(3, 4, C14, C5, 2) + || reg->value == CPENC(3, 4, C14, C5, 1) + || reg->value == CPENC(3, 4, C1, C3, 1) + || reg->value == CPENC(3, 4, C2, C2, 0)) + && !AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_V8_4)) + return FALSE; + + /* ARMv8.4 TLB instructions. */ + if ((reg->value == CPENS (0, C8, C1, 0) + || reg->value == CPENS (0, C8, C1, 1) + || reg->value == CPENS (0, C8, C1, 2) + || reg->value == CPENS (0, C8, C1, 3) + || reg->value == CPENS (0, C8, C1, 5) + || reg->value == CPENS (0, C8, C1, 7) + || reg->value == CPENS (4, C8, C4, 0) + || reg->value == CPENS (4, C8, C4, 4) + || reg->value == CPENS (4, C8, C1, 1) + || reg->value == CPENS (4, C8, C1, 5) + || reg->value == CPENS (4, C8, C1, 6) + || reg->value == CPENS (6, C8, C1, 1) + || reg->value == CPENS (6, C8, C1, 5) + || reg->value == CPENS (4, C8, C1, 0) + || reg->value == CPENS (4, C8, C1, 4) + || reg->value == CPENS (6, C8, C1, 0) + || reg->value == CPENS (0, C8, C6, 1) + || reg->value == CPENS (0, C8, C6, 3) + || reg->value == CPENS (0, C8, C6, 5) + || reg->value == CPENS (0, C8, C6, 7) + || reg->value == CPENS (0, C8, C2, 1) + || reg->value == CPENS (0, C8, C2, 3) + || reg->value == CPENS (0, C8, C2, 5) + || reg->value == CPENS (0, C8, C2, 7) + || reg->value == CPENS (0, C8, C5, 1) + || reg->value == CPENS (0, C8, C5, 3) + || reg->value == CPENS (0, C8, C5, 5) + || reg->value == CPENS (0, C8, C5, 7) + || reg->value == CPENS (4, C8, C0, 2) + || reg->value == CPENS (4, C8, C0, 6) + || reg->value == CPENS (4, C8, C4, 2) + || reg->value == CPENS (4, C8, C4, 6) + || reg->value == CPENS (4, C8, C4, 3) + || reg->value == CPENS (4, C8, C4, 7) + || reg->value == CPENS (4, C8, C6, 1) + || reg->value == CPENS (4, C8, C6, 5) + || reg->value == CPENS (4, C8, C2, 1) + || reg->value == CPENS (4, C8, C2, 5) + || reg->value == CPENS (4, C8, C5, 1) + || reg->value == CPENS (4, C8, C5, 5) + || reg->value == CPENS (6, C8, C6, 1) + || reg->value == CPENS (6, C8, C6, 5) + || reg->value == CPENS (6, C8, C2, 1) + || reg->value == CPENS (6, C8, C2, 5) + || reg->value == CPENS (6, C8, C5, 1) + || reg->value == CPENS (6, C8, C5, 5)) + && !AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_V8_4)) + return FALSE; + return TRUE; } +/* The CPENC below is fairly misleading, the fields + here are not in CPENC form. They are in op2op1 form. The fields are encoded + by ins_pstatefield, which just shifts the value by the width of the fields + in a loop. So if you CPENC them only the first value will be set, the rest + are masked out to 0. As an example. op2 = 3, op1=2. CPENC would produce a + value of 0b110000000001000000 (0x30040) while what you want is + 0b011010 (0x1a). */ const aarch64_sys_reg aarch64_pstatefields [] = { { "spsel", 0x05, 0 }, @@ -4178,6 +4269,7 @@ const aarch64_sys_reg aarch64_pstatefields [] = { "daifclr", 0x1f, 0 }, { "pan", 0x04, F_ARCHEXT }, { "uao", 0x03, F_ARCHEXT }, + { "dit", 0x1a, F_ARCHEXT }, { 0, CPENC(0,0,0,0,0), 0 }, }; @@ -4198,6 +4290,11 @@ aarch64_pstatefield_supported_p (const aarch64_feature_set features, && !AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_V8_2)) return FALSE; + /* DIT. Values are from aarch64_pstatefields. */ + if (reg->value == 0x1a + && !AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_V8_4)) + return FALSE; + return TRUE; } @@ -4276,6 +4373,55 @@ const aarch64_sys_ins_reg aarch64_sys_regs_tlbi[] = { "vale2", CPENS (4, C8, C7, 5), F_HASXT }, { "vale3", CPENS (6, C8, C7, 5), F_HASXT }, { "vaale1", CPENS (0, C8, C7, 7), F_HASXT }, + + { "vmalle1os", CPENS (0, C8, C1, 0), F_ARCHEXT }, + { "vae1os", CPENS (0, C8, C1, 1), F_HASXT | F_ARCHEXT }, + { "aside1os", CPENS (0, C8, C1, 2), F_HASXT | F_ARCHEXT }, + { "vaae1os", CPENS (0, C8, C1, 3), F_HASXT | F_ARCHEXT }, + { "vale1os", CPENS (0, C8, C1, 5), F_HASXT | F_ARCHEXT }, + { "vaale1os", CPENS (0, C8, C1, 7), F_HASXT | F_ARCHEXT }, + { "ipas2e1os", CPENS (4, C8, C4, 0), F_HASXT | F_ARCHEXT }, + { "ipas2le1os", CPENS (4, C8, C4, 4), F_HASXT | F_ARCHEXT }, + { "vae2os", CPENS (4, C8, C1, 1), F_HASXT | F_ARCHEXT }, + { "vale2os", CPENS (4, C8, C1, 5), F_HASXT | F_ARCHEXT }, + { "vmalls12e1os", CPENS (4, C8, C1, 6), F_ARCHEXT }, + { "vae3os", CPENS (6, C8, C1, 1), F_HASXT | F_ARCHEXT }, + { "vale3os", CPENS (6, C8, C1, 5), F_HASXT | F_ARCHEXT }, + { "alle2os", CPENS (4, C8, C1, 0), F_ARCHEXT }, + { "alle1os", CPENS (4, C8, C1, 4), F_ARCHEXT }, + { "alle3os", CPENS (6, C8, C1, 0), F_ARCHEXT }, + + { "rvae1", CPENS (0, C8, C6, 1), F_HASXT | F_ARCHEXT }, + { "rvaae1", CPENS (0, C8, C6, 3), F_HASXT | F_ARCHEXT }, + { "rvale1", CPENS (0, C8, C6, 5), F_HASXT | F_ARCHEXT }, + { "rvaale1", CPENS (0, C8, C6, 7), F_HASXT | F_ARCHEXT }, + { "rvae1is", CPENS (0, C8, C2, 1), F_HASXT | F_ARCHEXT }, + { "rvaae1is", CPENS (0, C8, C2, 3), F_HASXT | F_ARCHEXT }, + { "rvale1is", CPENS (0, C8, C2, 5), F_HASXT | F_ARCHEXT }, + { "rvaale1is", CPENS (0, C8, C2, 7), F_HASXT | F_ARCHEXT }, + { "rvae1os", CPENS (0, C8, C5, 1), F_HASXT | F_ARCHEXT }, + { "rvaae1os", CPENS (0, C8, C5, 3), F_HASXT | F_ARCHEXT }, + { "rvale1os", CPENS (0, C8, C5, 5), F_HASXT | F_ARCHEXT }, + { "rvaale1os", CPENS (0, C8, C5, 7), F_HASXT | F_ARCHEXT }, + { "ripas2e1is", CPENS (4, C8, C0, 2), F_HASXT | F_ARCHEXT }, + { "ripas2le1is",CPENS (4, C8, C0, 6), F_HASXT | F_ARCHEXT }, + { "ripas2e1", CPENS (4, C8, C4, 2), F_HASXT | F_ARCHEXT }, + { "ripas2le1", CPENS (4, C8, C4, 6), F_HASXT | F_ARCHEXT }, + { "ripas2e1os", CPENS (4, C8, C4, 3), F_HASXT | F_ARCHEXT }, + { "ripas2le1os",CPENS (4, C8, C4, 7), F_HASXT | F_ARCHEXT }, + { "rvae2", CPENS (4, C8, C6, 1), F_HASXT | F_ARCHEXT }, + { "rvale2", CPENS (4, C8, C6, 5), F_HASXT | F_ARCHEXT }, + { "rvae2is", CPENS (4, C8, C2, 1), F_HASXT | F_ARCHEXT }, + { "rvale2is", CPENS (4, C8, C2, 5), F_HASXT | F_ARCHEXT }, + { "rvae2os", CPENS (4, C8, C5, 1), F_HASXT | F_ARCHEXT }, + { "rvale2os", CPENS (4, C8, C5, 5), F_HASXT | F_ARCHEXT }, + { "rvae3", CPENS (6, C8, C6, 1), F_HASXT | F_ARCHEXT }, + { "rvale3", CPENS (6, C8, C6, 5), F_HASXT | F_ARCHEXT }, + { "rvae3is", CPENS (6, C8, C2, 1), F_HASXT | F_ARCHEXT }, + { "rvale3is", CPENS (6, C8, C2, 5), F_HASXT | F_ARCHEXT }, + { "rvae3os", CPENS (6, C8, C5, 1), F_HASXT | F_ARCHEXT }, + { "rvale3os", CPENS (6, C8, C5, 5), F_HASXT | F_ARCHEXT }, + { 0, CPENS(0,0,0,0), 0 } };