mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-21 02:24:17 +08:00
[AArch64] Add ARMv8.3 javascript floating-point conversion instruction
Add support for ARMv8.3 FJCVTZS floating-point conversion instruction. For details about javascript floating-point conversion see https://community.arm.com/groups/processors/blog/2016/10/27/armv8-a-architecture-2016-additions opcodes/ 2016-11-18 Szabolcs Nagy <szabolcs.nagy@arm.com> * aarch64-tbl.h (arch64_opcode_table): Add fjcvtzs. (QL_FP2INT_W_D, aarch64_feature_fp_v8_3, FP_V8_3): Define. * aarch64-asm-2.c: Regenerate. * aarch64-dis-2.c: Regenerate. * aarch64-opc-2.c: Regenerate. gas/ 2016-11-18 Szabolcs Nagy <szabolcs.nagy@arm.com> * testsuite/gas/aarch64/fp-armv8_3.s: Add fjcvtzs test. * testsuite/gas/aarch64/fp-armv8_3.d: Likewise. * testsuite/gas/aarch64/illegal-fjcvtzs.s: Likewise. * testsuite/gas/aarch64/illegal-fjcvtzs.d: Likewise. * testsuite/gas/aarch64/illegal-fjcvtzs.l: Likewise. * testsuite/gas/aarch64/illegal-nofp-armv8_3.s: Likewise. * testsuite/gas/aarch64/illegal-nofp-armv8_3.d: Likewise. * testsuite/gas/aarch64/illegal-nofp-armv8_3.l: Likewise.
This commit is contained in:
@ -1,3 +1,14 @@
|
|||||||
|
2016-11-18 Szabolcs Nagy <szabolcs.nagy@arm.com>
|
||||||
|
|
||||||
|
* testsuite/gas/aarch64/fp-armv8_3.s: Add fjcvtzs test.
|
||||||
|
* testsuite/gas/aarch64/fp-armv8_3.d: Likewise.
|
||||||
|
* testsuite/gas/aarch64/illegal-fjcvtzs.s: Likewise.
|
||||||
|
* testsuite/gas/aarch64/illegal-fjcvtzs.d: Likewise.
|
||||||
|
* testsuite/gas/aarch64/illegal-fjcvtzs.l: Likewise.
|
||||||
|
* testsuite/gas/aarch64/illegal-nofp-armv8_3.s: Likewise.
|
||||||
|
* testsuite/gas/aarch64/illegal-nofp-armv8_3.d: Likewise.
|
||||||
|
* testsuite/gas/aarch64/illegal-nofp-armv8_3.l: Likewise.
|
||||||
|
|
||||||
2016-11-18 Szabolcs Nagy <szabolcs.nagy@arm.com>
|
2016-11-18 Szabolcs Nagy <szabolcs.nagy@arm.com>
|
||||||
|
|
||||||
* config/tc-aarch64.c (parse_operands): Handle AARCH64_OPND_ADDR_SIMM10.
|
* config/tc-aarch64.c (parse_operands): Handle AARCH64_OPND_ADDR_SIMM10.
|
||||||
|
10
gas/testsuite/gas/aarch64/fp-armv8_3.d
Normal file
10
gas/testsuite/gas/aarch64/fp-armv8_3.d
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#objdump: -dr
|
||||||
|
#as: -march=armv8.3-a
|
||||||
|
|
||||||
|
.*: file .*
|
||||||
|
|
||||||
|
Disassembly of section \.text:
|
||||||
|
|
||||||
|
0000000000000000 <.*>:
|
||||||
|
0: 1e7e0041 fjcvtzs w1, d2
|
||||||
|
4: 1e7e00e7 fjcvtzs w7, d7
|
5
gas/testsuite/gas/aarch64/fp-armv8_3.s
Normal file
5
gas/testsuite/gas/aarch64/fp-armv8_3.s
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
/* ARMv8.3 Javascript conversion instruction. */
|
||||||
|
.text
|
||||||
|
|
||||||
|
fjcvtzs w1, d2
|
||||||
|
fjcvtzs w7, d7
|
2
gas/testsuite/gas/aarch64/illegal-fjcvtzs.d
Normal file
2
gas/testsuite/gas/aarch64/illegal-fjcvtzs.d
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
#as: -march=armv8.3-a -mno-verbose-error
|
||||||
|
#error-output: illegal-fjcvtzs.l
|
8
gas/testsuite/gas/aarch64/illegal-fjcvtzs.l
Normal file
8
gas/testsuite/gas/aarch64/illegal-fjcvtzs.l
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
[^:]+: Assembler messages:
|
||||||
|
[^:]+:8: Error: operand 1 must be an integer register -- `fjcvtzs d0,d1'
|
||||||
|
[^:]+:9: Error: operand 1 must be an integer register -- `fjcvtzs s0,d1'
|
||||||
|
[^:]+:10: Error: operand mismatch -- `fjcvtzs x0,d1'
|
||||||
|
[^:]+:11: Error: operand mismatch -- `fjcvtzs w0,s1'
|
||||||
|
[^:]+:12: Error: operand mismatch -- `fjcvtzs w0,h1'
|
||||||
|
[^:]+:13: Error: operand mismatch -- `fjcvtzs w0,q1'
|
||||||
|
[^:]+:14: Error: operand 2 must be a floating-point register -- `fjcvtzs w0,x1'
|
14
gas/testsuite/gas/aarch64/illegal-fjcvtzs.s
Normal file
14
gas/testsuite/gas/aarch64/illegal-fjcvtzs.s
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
// Test illegal ARMv8.3 FJCVTZS instructions
|
||||||
|
.text
|
||||||
|
|
||||||
|
// Good.
|
||||||
|
fjcvtzs w0, d1
|
||||||
|
|
||||||
|
// Bad.
|
||||||
|
fjcvtzs d0, d1
|
||||||
|
fjcvtzs s0, d1
|
||||||
|
fjcvtzs x0, d1
|
||||||
|
fjcvtzs w0, s1
|
||||||
|
fjcvtzs w0, h1
|
||||||
|
fjcvtzs w0, q1
|
||||||
|
fjcvtzs w0, x1
|
2
gas/testsuite/gas/aarch64/illegal-nofp-armv8_3.d
Normal file
2
gas/testsuite/gas/aarch64/illegal-nofp-armv8_3.d
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
#as: -march=armv8.3-a+nofp -mno-verbose-error
|
||||||
|
#error-output: illegal-nofp-armv8_3.l
|
3
gas/testsuite/gas/aarch64/illegal-nofp-armv8_3.l
Normal file
3
gas/testsuite/gas/aarch64/illegal-nofp-armv8_3.l
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[^:]*: Assembler messages:
|
||||||
|
[^:]+:4: Error: selected processor does not support `fneg s0,s1'
|
||||||
|
[^:]+:6: Error: selected processor does not support `fjcvtzs w0,d1'
|
6
gas/testsuite/gas/aarch64/illegal-nofp-armv8_3.s
Normal file
6
gas/testsuite/gas/aarch64/illegal-nofp-armv8_3.s
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
// Test -march=armv8.3-a+nofp to disable fp-dependent ARMv8.3 instructions.
|
||||||
|
.text
|
||||||
|
neg w0, w1
|
||||||
|
fneg s0, s1
|
||||||
|
pacia x0, x1
|
||||||
|
fjcvtzs w0, d1
|
@ -1,3 +1,11 @@
|
|||||||
|
2016-11-18 Szabolcs Nagy <szabolcs.nagy@arm.com>
|
||||||
|
|
||||||
|
* aarch64-tbl.h (arch64_opcode_table): Add fjcvtzs.
|
||||||
|
(QL_FP2INT_W_D, aarch64_feature_fp_v8_3, FP_V8_3): Define.
|
||||||
|
* aarch64-asm-2.c: Regenerate.
|
||||||
|
* aarch64-dis-2.c: Regenerate.
|
||||||
|
* aarch64-opc-2.c: Regenerate.
|
||||||
|
|
||||||
2016-11-18 Szabolcs Nagy <szabolcs.nagy@arm.com>
|
2016-11-18 Szabolcs Nagy <szabolcs.nagy@arm.com>
|
||||||
|
|
||||||
* aarch64-tbl.h (QL_X1NIL): New.
|
* aarch64-tbl.h (QL_X1NIL): New.
|
||||||
|
@ -197,381 +197,381 @@ aarch64_find_real_opcode (const aarch64_opcode *opcode)
|
|||||||
case 743: /* extr */
|
case 743: /* extr */
|
||||||
value = 743; /* --> extr. */
|
value = 743; /* --> extr. */
|
||||||
break;
|
break;
|
||||||
case 953: /* bic */
|
case 954: /* bic */
|
||||||
case 952: /* and */
|
case 953: /* and */
|
||||||
value = 952; /* --> and. */
|
value = 953; /* --> and. */
|
||||||
break;
|
break;
|
||||||
case 955: /* mov */
|
case 956: /* mov */
|
||||||
case 954: /* orr */
|
case 955: /* orr */
|
||||||
value = 954; /* --> orr. */
|
value = 955; /* --> orr. */
|
||||||
break;
|
break;
|
||||||
case 958: /* tst */
|
case 959: /* tst */
|
||||||
case 957: /* ands */
|
case 958: /* ands */
|
||||||
value = 957; /* --> ands. */
|
value = 958; /* --> ands. */
|
||||||
break;
|
break;
|
||||||
case 963: /* uxtw */
|
case 964: /* uxtw */
|
||||||
case 962: /* mov */
|
case 963: /* mov */
|
||||||
case 961: /* orr */
|
case 962: /* orr */
|
||||||
value = 961; /* --> orr. */
|
value = 962; /* --> orr. */
|
||||||
break;
|
break;
|
||||||
case 965: /* mvn */
|
case 966: /* mvn */
|
||||||
case 964: /* orn */
|
case 965: /* orn */
|
||||||
value = 964; /* --> orn. */
|
value = 965; /* --> orn. */
|
||||||
break;
|
break;
|
||||||
case 969: /* tst */
|
case 970: /* tst */
|
||||||
case 968: /* ands */
|
case 969: /* ands */
|
||||||
value = 968; /* --> ands. */
|
value = 969; /* --> ands. */
|
||||||
break;
|
break;
|
||||||
case 1095: /* staddb */
|
case 1096: /* staddb */
|
||||||
case 999: /* ldaddb */
|
case 1000: /* ldaddb */
|
||||||
value = 999; /* --> ldaddb. */
|
value = 1000; /* --> ldaddb. */
|
||||||
break;
|
break;
|
||||||
case 1096: /* staddh */
|
case 1097: /* staddh */
|
||||||
case 1000: /* ldaddh */
|
case 1001: /* ldaddh */
|
||||||
value = 1000; /* --> ldaddh. */
|
value = 1001; /* --> ldaddh. */
|
||||||
break;
|
break;
|
||||||
case 1097: /* stadd */
|
case 1098: /* stadd */
|
||||||
case 1001: /* ldadd */
|
case 1002: /* ldadd */
|
||||||
value = 1001; /* --> ldadd. */
|
value = 1002; /* --> ldadd. */
|
||||||
break;
|
break;
|
||||||
case 1098: /* staddlb */
|
case 1099: /* staddlb */
|
||||||
case 1003: /* ldaddlb */
|
case 1004: /* ldaddlb */
|
||||||
value = 1003; /* --> ldaddlb. */
|
value = 1004; /* --> ldaddlb. */
|
||||||
break;
|
break;
|
||||||
case 1099: /* staddlh */
|
case 1100: /* staddlh */
|
||||||
case 1006: /* ldaddlh */
|
case 1007: /* ldaddlh */
|
||||||
value = 1006; /* --> ldaddlh. */
|
value = 1007; /* --> ldaddlh. */
|
||||||
break;
|
break;
|
||||||
case 1100: /* staddl */
|
case 1101: /* staddl */
|
||||||
case 1009: /* ldaddl */
|
case 1010: /* ldaddl */
|
||||||
value = 1009; /* --> ldaddl. */
|
value = 1010; /* --> ldaddl. */
|
||||||
break;
|
break;
|
||||||
case 1101: /* stclrb */
|
case 1102: /* stclrb */
|
||||||
case 1011: /* ldclrb */
|
case 1012: /* ldclrb */
|
||||||
value = 1011; /* --> ldclrb. */
|
value = 1012; /* --> ldclrb. */
|
||||||
break;
|
break;
|
||||||
case 1102: /* stclrh */
|
case 1103: /* stclrh */
|
||||||
case 1012: /* ldclrh */
|
case 1013: /* ldclrh */
|
||||||
value = 1012; /* --> ldclrh. */
|
value = 1013; /* --> ldclrh. */
|
||||||
break;
|
break;
|
||||||
case 1103: /* stclr */
|
case 1104: /* stclr */
|
||||||
case 1013: /* ldclr */
|
case 1014: /* ldclr */
|
||||||
value = 1013; /* --> ldclr. */
|
value = 1014; /* --> ldclr. */
|
||||||
break;
|
break;
|
||||||
case 1104: /* stclrlb */
|
case 1105: /* stclrlb */
|
||||||
case 1015: /* ldclrlb */
|
case 1016: /* ldclrlb */
|
||||||
value = 1015; /* --> ldclrlb. */
|
value = 1016; /* --> ldclrlb. */
|
||||||
break;
|
break;
|
||||||
case 1105: /* stclrlh */
|
case 1106: /* stclrlh */
|
||||||
case 1018: /* ldclrlh */
|
case 1019: /* ldclrlh */
|
||||||
value = 1018; /* --> ldclrlh. */
|
value = 1019; /* --> ldclrlh. */
|
||||||
break;
|
break;
|
||||||
case 1106: /* stclrl */
|
case 1107: /* stclrl */
|
||||||
case 1021: /* ldclrl */
|
case 1022: /* ldclrl */
|
||||||
value = 1021; /* --> ldclrl. */
|
value = 1022; /* --> ldclrl. */
|
||||||
break;
|
break;
|
||||||
case 1107: /* steorb */
|
case 1108: /* steorb */
|
||||||
case 1023: /* ldeorb */
|
case 1024: /* ldeorb */
|
||||||
value = 1023; /* --> ldeorb. */
|
value = 1024; /* --> ldeorb. */
|
||||||
break;
|
break;
|
||||||
case 1108: /* steorh */
|
case 1109: /* steorh */
|
||||||
case 1024: /* ldeorh */
|
case 1025: /* ldeorh */
|
||||||
value = 1024; /* --> ldeorh. */
|
value = 1025; /* --> ldeorh. */
|
||||||
break;
|
break;
|
||||||
case 1109: /* steor */
|
case 1110: /* steor */
|
||||||
case 1025: /* ldeor */
|
case 1026: /* ldeor */
|
||||||
value = 1025; /* --> ldeor. */
|
value = 1026; /* --> ldeor. */
|
||||||
break;
|
break;
|
||||||
case 1110: /* steorlb */
|
case 1111: /* steorlb */
|
||||||
case 1027: /* ldeorlb */
|
case 1028: /* ldeorlb */
|
||||||
value = 1027; /* --> ldeorlb. */
|
value = 1028; /* --> ldeorlb. */
|
||||||
break;
|
break;
|
||||||
case 1111: /* steorlh */
|
case 1112: /* steorlh */
|
||||||
case 1030: /* ldeorlh */
|
case 1031: /* ldeorlh */
|
||||||
value = 1030; /* --> ldeorlh. */
|
value = 1031; /* --> ldeorlh. */
|
||||||
break;
|
break;
|
||||||
case 1112: /* steorl */
|
case 1113: /* steorl */
|
||||||
case 1033: /* ldeorl */
|
case 1034: /* ldeorl */
|
||||||
value = 1033; /* --> ldeorl. */
|
value = 1034; /* --> ldeorl. */
|
||||||
break;
|
break;
|
||||||
case 1113: /* stsetb */
|
case 1114: /* stsetb */
|
||||||
case 1035: /* ldsetb */
|
case 1036: /* ldsetb */
|
||||||
value = 1035; /* --> ldsetb. */
|
value = 1036; /* --> ldsetb. */
|
||||||
break;
|
break;
|
||||||
case 1114: /* stseth */
|
case 1115: /* stseth */
|
||||||
case 1036: /* ldseth */
|
case 1037: /* ldseth */
|
||||||
value = 1036; /* --> ldseth. */
|
value = 1037; /* --> ldseth. */
|
||||||
break;
|
break;
|
||||||
case 1115: /* stset */
|
case 1116: /* stset */
|
||||||
case 1037: /* ldset */
|
case 1038: /* ldset */
|
||||||
value = 1037; /* --> ldset. */
|
value = 1038; /* --> ldset. */
|
||||||
break;
|
break;
|
||||||
case 1116: /* stsetlb */
|
case 1117: /* stsetlb */
|
||||||
case 1039: /* ldsetlb */
|
case 1040: /* ldsetlb */
|
||||||
value = 1039; /* --> ldsetlb. */
|
value = 1040; /* --> ldsetlb. */
|
||||||
break;
|
break;
|
||||||
case 1117: /* stsetlh */
|
case 1118: /* stsetlh */
|
||||||
case 1042: /* ldsetlh */
|
case 1043: /* ldsetlh */
|
||||||
value = 1042; /* --> ldsetlh. */
|
value = 1043; /* --> ldsetlh. */
|
||||||
break;
|
break;
|
||||||
case 1118: /* stsetl */
|
case 1119: /* stsetl */
|
||||||
case 1045: /* ldsetl */
|
case 1046: /* ldsetl */
|
||||||
value = 1045; /* --> ldsetl. */
|
value = 1046; /* --> ldsetl. */
|
||||||
break;
|
break;
|
||||||
case 1119: /* stsmaxb */
|
case 1120: /* stsmaxb */
|
||||||
case 1047: /* ldsmaxb */
|
case 1048: /* ldsmaxb */
|
||||||
value = 1047; /* --> ldsmaxb. */
|
value = 1048; /* --> ldsmaxb. */
|
||||||
break;
|
break;
|
||||||
case 1120: /* stsmaxh */
|
case 1121: /* stsmaxh */
|
||||||
case 1048: /* ldsmaxh */
|
case 1049: /* ldsmaxh */
|
||||||
value = 1048; /* --> ldsmaxh. */
|
value = 1049; /* --> ldsmaxh. */
|
||||||
break;
|
break;
|
||||||
case 1121: /* stsmax */
|
case 1122: /* stsmax */
|
||||||
case 1049: /* ldsmax */
|
case 1050: /* ldsmax */
|
||||||
value = 1049; /* --> ldsmax. */
|
value = 1050; /* --> ldsmax. */
|
||||||
break;
|
break;
|
||||||
case 1122: /* stsmaxlb */
|
case 1123: /* stsmaxlb */
|
||||||
case 1051: /* ldsmaxlb */
|
case 1052: /* ldsmaxlb */
|
||||||
value = 1051; /* --> ldsmaxlb. */
|
value = 1052; /* --> ldsmaxlb. */
|
||||||
break;
|
break;
|
||||||
case 1123: /* stsmaxlh */
|
case 1124: /* stsmaxlh */
|
||||||
case 1054: /* ldsmaxlh */
|
case 1055: /* ldsmaxlh */
|
||||||
value = 1054; /* --> ldsmaxlh. */
|
value = 1055; /* --> ldsmaxlh. */
|
||||||
break;
|
break;
|
||||||
case 1124: /* stsmaxl */
|
case 1125: /* stsmaxl */
|
||||||
case 1057: /* ldsmaxl */
|
case 1058: /* ldsmaxl */
|
||||||
value = 1057; /* --> ldsmaxl. */
|
value = 1058; /* --> ldsmaxl. */
|
||||||
break;
|
break;
|
||||||
case 1125: /* stsminb */
|
case 1126: /* stsminb */
|
||||||
case 1059: /* ldsminb */
|
case 1060: /* ldsminb */
|
||||||
value = 1059; /* --> ldsminb. */
|
value = 1060; /* --> ldsminb. */
|
||||||
break;
|
break;
|
||||||
case 1126: /* stsminh */
|
case 1127: /* stsminh */
|
||||||
case 1060: /* ldsminh */
|
case 1061: /* ldsminh */
|
||||||
value = 1060; /* --> ldsminh. */
|
value = 1061; /* --> ldsminh. */
|
||||||
break;
|
break;
|
||||||
case 1127: /* stsmin */
|
case 1128: /* stsmin */
|
||||||
case 1061: /* ldsmin */
|
case 1062: /* ldsmin */
|
||||||
value = 1061; /* --> ldsmin. */
|
value = 1062; /* --> ldsmin. */
|
||||||
break;
|
break;
|
||||||
case 1128: /* stsminlb */
|
case 1129: /* stsminlb */
|
||||||
case 1063: /* ldsminlb */
|
case 1064: /* ldsminlb */
|
||||||
value = 1063; /* --> ldsminlb. */
|
value = 1064; /* --> ldsminlb. */
|
||||||
break;
|
break;
|
||||||
case 1129: /* stsminlh */
|
case 1130: /* stsminlh */
|
||||||
case 1066: /* ldsminlh */
|
case 1067: /* ldsminlh */
|
||||||
value = 1066; /* --> ldsminlh. */
|
value = 1067; /* --> ldsminlh. */
|
||||||
break;
|
break;
|
||||||
case 1130: /* stsminl */
|
case 1131: /* stsminl */
|
||||||
case 1069: /* ldsminl */
|
case 1070: /* ldsminl */
|
||||||
value = 1069; /* --> ldsminl. */
|
value = 1070; /* --> ldsminl. */
|
||||||
break;
|
break;
|
||||||
case 1131: /* stumaxb */
|
case 1132: /* stumaxb */
|
||||||
case 1071: /* ldumaxb */
|
case 1072: /* ldumaxb */
|
||||||
value = 1071; /* --> ldumaxb. */
|
value = 1072; /* --> ldumaxb. */
|
||||||
break;
|
break;
|
||||||
case 1132: /* stumaxh */
|
case 1133: /* stumaxh */
|
||||||
case 1072: /* ldumaxh */
|
case 1073: /* ldumaxh */
|
||||||
value = 1072; /* --> ldumaxh. */
|
value = 1073; /* --> ldumaxh. */
|
||||||
break;
|
break;
|
||||||
case 1133: /* stumax */
|
case 1134: /* stumax */
|
||||||
case 1073: /* ldumax */
|
case 1074: /* ldumax */
|
||||||
value = 1073; /* --> ldumax. */
|
value = 1074; /* --> ldumax. */
|
||||||
break;
|
break;
|
||||||
case 1134: /* stumaxlb */
|
case 1135: /* stumaxlb */
|
||||||
case 1075: /* ldumaxlb */
|
case 1076: /* ldumaxlb */
|
||||||
value = 1075; /* --> ldumaxlb. */
|
value = 1076; /* --> ldumaxlb. */
|
||||||
break;
|
break;
|
||||||
case 1135: /* stumaxlh */
|
case 1136: /* stumaxlh */
|
||||||
case 1078: /* ldumaxlh */
|
case 1079: /* ldumaxlh */
|
||||||
value = 1078; /* --> ldumaxlh. */
|
value = 1079; /* --> ldumaxlh. */
|
||||||
break;
|
break;
|
||||||
case 1136: /* stumaxl */
|
case 1137: /* stumaxl */
|
||||||
case 1081: /* ldumaxl */
|
case 1082: /* ldumaxl */
|
||||||
value = 1081; /* --> ldumaxl. */
|
value = 1082; /* --> ldumaxl. */
|
||||||
break;
|
break;
|
||||||
case 1137: /* stuminb */
|
case 1138: /* stuminb */
|
||||||
case 1083: /* lduminb */
|
case 1084: /* lduminb */
|
||||||
value = 1083; /* --> lduminb. */
|
value = 1084; /* --> lduminb. */
|
||||||
break;
|
break;
|
||||||
case 1138: /* stuminh */
|
case 1139: /* stuminh */
|
||||||
case 1084: /* lduminh */
|
case 1085: /* lduminh */
|
||||||
value = 1084; /* --> lduminh. */
|
value = 1085; /* --> lduminh. */
|
||||||
break;
|
break;
|
||||||
case 1139: /* stumin */
|
case 1140: /* stumin */
|
||||||
case 1085: /* ldumin */
|
case 1086: /* ldumin */
|
||||||
value = 1085; /* --> ldumin. */
|
value = 1086; /* --> ldumin. */
|
||||||
break;
|
break;
|
||||||
case 1140: /* stuminlb */
|
case 1141: /* stuminlb */
|
||||||
case 1087: /* lduminlb */
|
case 1088: /* lduminlb */
|
||||||
value = 1087; /* --> lduminlb. */
|
value = 1088; /* --> lduminlb. */
|
||||||
break;
|
break;
|
||||||
case 1141: /* stuminlh */
|
case 1142: /* stuminlh */
|
||||||
case 1090: /* lduminlh */
|
case 1091: /* lduminlh */
|
||||||
value = 1090; /* --> lduminlh. */
|
value = 1091; /* --> lduminlh. */
|
||||||
break;
|
break;
|
||||||
case 1142: /* stuminl */
|
case 1143: /* stuminl */
|
||||||
case 1093: /* lduminl */
|
case 1094: /* lduminl */
|
||||||
value = 1093; /* --> lduminl. */
|
value = 1094; /* --> lduminl. */
|
||||||
break;
|
break;
|
||||||
case 1144: /* mov */
|
case 1145: /* mov */
|
||||||
case 1143: /* movn */
|
case 1144: /* movn */
|
||||||
value = 1143; /* --> movn. */
|
value = 1144; /* --> movn. */
|
||||||
break;
|
break;
|
||||||
case 1146: /* mov */
|
case 1147: /* mov */
|
||||||
case 1145: /* movz */
|
case 1146: /* movz */
|
||||||
value = 1145; /* --> movz. */
|
value = 1146; /* --> movz. */
|
||||||
break;
|
break;
|
||||||
case 1184: /* autibsp */
|
case 1185: /* autibsp */
|
||||||
case 1183: /* autibz */
|
case 1184: /* autibz */
|
||||||
case 1182: /* autiasp */
|
case 1183: /* autiasp */
|
||||||
case 1181: /* autiaz */
|
case 1182: /* autiaz */
|
||||||
case 1180: /* pacibsp */
|
case 1181: /* pacibsp */
|
||||||
case 1179: /* pacibz */
|
case 1180: /* pacibz */
|
||||||
case 1178: /* paciasp */
|
case 1179: /* paciasp */
|
||||||
case 1177: /* paciaz */
|
case 1178: /* paciaz */
|
||||||
case 1164: /* psb */
|
case 1165: /* psb */
|
||||||
case 1163: /* esb */
|
case 1164: /* esb */
|
||||||
case 1162: /* autib1716 */
|
case 1163: /* autib1716 */
|
||||||
case 1161: /* autia1716 */
|
case 1162: /* autia1716 */
|
||||||
case 1160: /* pacib1716 */
|
case 1161: /* pacib1716 */
|
||||||
case 1159: /* pacia1716 */
|
case 1160: /* pacia1716 */
|
||||||
case 1158: /* xpaclri */
|
case 1159: /* xpaclri */
|
||||||
case 1157: /* sevl */
|
case 1158: /* sevl */
|
||||||
case 1156: /* sev */
|
case 1157: /* sev */
|
||||||
case 1155: /* wfi */
|
case 1156: /* wfi */
|
||||||
case 1154: /* wfe */
|
case 1155: /* wfe */
|
||||||
case 1153: /* yield */
|
case 1154: /* yield */
|
||||||
case 1152: /* nop */
|
case 1153: /* nop */
|
||||||
case 1151: /* hint */
|
case 1152: /* hint */
|
||||||
value = 1151; /* --> hint. */
|
value = 1152; /* --> hint. */
|
||||||
break;
|
break;
|
||||||
case 1173: /* tlbi */
|
case 1174: /* tlbi */
|
||||||
case 1172: /* ic */
|
case 1173: /* ic */
|
||||||
case 1171: /* dc */
|
case 1172: /* dc */
|
||||||
case 1170: /* at */
|
case 1171: /* at */
|
||||||
case 1169: /* sys */
|
case 1170: /* sys */
|
||||||
value = 1169; /* --> sys. */
|
value = 1170; /* --> sys. */
|
||||||
break;
|
break;
|
||||||
case 1927: /* bic */
|
case 1928: /* bic */
|
||||||
case 1232: /* and */
|
case 1233: /* and */
|
||||||
value = 1232; /* --> and. */
|
value = 1233; /* --> and. */
|
||||||
break;
|
break;
|
||||||
case 1215: /* mov */
|
case 1216: /* mov */
|
||||||
case 1234: /* and */
|
case 1235: /* and */
|
||||||
value = 1234; /* --> and. */
|
value = 1235; /* --> and. */
|
||||||
break;
|
break;
|
||||||
case 1219: /* movs */
|
case 1220: /* movs */
|
||||||
case 1235: /* ands */
|
case 1236: /* ands */
|
||||||
value = 1235; /* --> ands. */
|
value = 1236; /* --> ands. */
|
||||||
break;
|
break;
|
||||||
case 1928: /* cmple */
|
case 1929: /* cmple */
|
||||||
case 1270: /* cmpge */
|
case 1271: /* cmpge */
|
||||||
value = 1270; /* --> cmpge. */
|
value = 1271; /* --> cmpge. */
|
||||||
break;
|
break;
|
||||||
case 1931: /* cmplt */
|
case 1932: /* cmplt */
|
||||||
case 1273: /* cmpgt */
|
case 1274: /* cmpgt */
|
||||||
value = 1273; /* --> cmpgt. */
|
value = 1274; /* --> cmpgt. */
|
||||||
break;
|
break;
|
||||||
case 1929: /* cmplo */
|
case 1930: /* cmplo */
|
||||||
case 1275: /* cmphi */
|
case 1276: /* cmphi */
|
||||||
value = 1275; /* --> cmphi. */
|
value = 1276; /* --> cmphi. */
|
||||||
break;
|
break;
|
||||||
case 1930: /* cmpls */
|
case 1931: /* cmpls */
|
||||||
case 1278: /* cmphs */
|
case 1279: /* cmphs */
|
||||||
value = 1278; /* --> cmphs. */
|
value = 1279; /* --> cmphs. */
|
||||||
break;
|
break;
|
||||||
case 1212: /* mov */
|
case 1213: /* mov */
|
||||||
case 1300: /* cpy */
|
|
||||||
value = 1300; /* --> cpy. */
|
|
||||||
break;
|
|
||||||
case 1214: /* mov */
|
|
||||||
case 1301: /* cpy */
|
case 1301: /* cpy */
|
||||||
value = 1301; /* --> cpy. */
|
value = 1301; /* --> cpy. */
|
||||||
break;
|
break;
|
||||||
case 1938: /* fmov */
|
case 1215: /* mov */
|
||||||
case 1217: /* mov */
|
|
||||||
case 1302: /* cpy */
|
case 1302: /* cpy */
|
||||||
value = 1302; /* --> cpy. */
|
value = 1302; /* --> cpy. */
|
||||||
break;
|
break;
|
||||||
case 1207: /* mov */
|
case 1939: /* fmov */
|
||||||
case 1314: /* dup */
|
case 1218: /* mov */
|
||||||
value = 1314; /* --> dup. */
|
case 1303: /* cpy */
|
||||||
|
value = 1303; /* --> cpy. */
|
||||||
break;
|
break;
|
||||||
case 1209: /* mov */
|
case 1208: /* mov */
|
||||||
case 1206: /* mov */
|
|
||||||
case 1315: /* dup */
|
case 1315: /* dup */
|
||||||
value = 1315; /* --> dup. */
|
value = 1315; /* --> dup. */
|
||||||
break;
|
break;
|
||||||
case 1937: /* fmov */
|
case 1210: /* mov */
|
||||||
case 1211: /* mov */
|
case 1207: /* mov */
|
||||||
case 1316: /* dup */
|
case 1316: /* dup */
|
||||||
value = 1316; /* --> dup. */
|
value = 1316; /* --> dup. */
|
||||||
break;
|
break;
|
||||||
case 1210: /* mov */
|
case 1938: /* fmov */
|
||||||
case 1317: /* dupm */
|
case 1212: /* mov */
|
||||||
value = 1317; /* --> dupm. */
|
case 1317: /* dup */
|
||||||
|
value = 1317; /* --> dup. */
|
||||||
break;
|
break;
|
||||||
case 1932: /* eon */
|
case 1211: /* mov */
|
||||||
case 1319: /* eor */
|
case 1318: /* dupm */
|
||||||
value = 1319; /* --> eor. */
|
value = 1318; /* --> dupm. */
|
||||||
break;
|
break;
|
||||||
case 1220: /* not */
|
case 1933: /* eon */
|
||||||
case 1321: /* eor */
|
case 1320: /* eor */
|
||||||
value = 1321; /* --> eor. */
|
value = 1320; /* --> eor. */
|
||||||
break;
|
break;
|
||||||
case 1221: /* nots */
|
case 1221: /* not */
|
||||||
case 1322: /* eors */
|
case 1322: /* eor */
|
||||||
value = 1322; /* --> eors. */
|
value = 1322; /* --> eor. */
|
||||||
break;
|
break;
|
||||||
case 1933: /* facle */
|
case 1222: /* nots */
|
||||||
case 1327: /* facge */
|
case 1323: /* eors */
|
||||||
value = 1327; /* --> facge. */
|
value = 1323; /* --> eors. */
|
||||||
break;
|
break;
|
||||||
case 1934: /* faclt */
|
case 1934: /* facle */
|
||||||
case 1328: /* facgt */
|
case 1328: /* facge */
|
||||||
value = 1328; /* --> facgt. */
|
value = 1328; /* --> facge. */
|
||||||
break;
|
break;
|
||||||
case 1935: /* fcmle */
|
case 1935: /* faclt */
|
||||||
case 1337: /* fcmge */
|
case 1329: /* facgt */
|
||||||
value = 1337; /* --> fcmge. */
|
value = 1329; /* --> facgt. */
|
||||||
break;
|
break;
|
||||||
case 1936: /* fcmlt */
|
case 1936: /* fcmle */
|
||||||
case 1339: /* fcmgt */
|
case 1338: /* fcmge */
|
||||||
value = 1339; /* --> fcmgt. */
|
value = 1338; /* --> fcmge. */
|
||||||
|
break;
|
||||||
|
case 1937: /* fcmlt */
|
||||||
|
case 1340: /* fcmgt */
|
||||||
|
value = 1340; /* --> fcmgt. */
|
||||||
|
break;
|
||||||
|
case 1205: /* fmov */
|
||||||
|
case 1346: /* fcpy */
|
||||||
|
value = 1346; /* --> fcpy. */
|
||||||
break;
|
break;
|
||||||
case 1204: /* fmov */
|
case 1204: /* fmov */
|
||||||
case 1345: /* fcpy */
|
case 1363: /* fdup */
|
||||||
value = 1345; /* --> fcpy. */
|
value = 1363; /* --> fdup. */
|
||||||
break;
|
break;
|
||||||
case 1203: /* fmov */
|
case 1206: /* mov */
|
||||||
case 1362: /* fdup */
|
|
||||||
value = 1362; /* --> fdup. */
|
|
||||||
break;
|
|
||||||
case 1205: /* mov */
|
|
||||||
case 1660: /* orr */
|
|
||||||
value = 1660; /* --> orr. */
|
|
||||||
break;
|
|
||||||
case 1939: /* orn */
|
|
||||||
case 1661: /* orr */
|
case 1661: /* orr */
|
||||||
value = 1661; /* --> orr. */
|
value = 1661; /* --> orr. */
|
||||||
break;
|
break;
|
||||||
case 1208: /* mov */
|
case 1940: /* orn */
|
||||||
case 1663: /* orr */
|
case 1662: /* orr */
|
||||||
value = 1663; /* --> orr. */
|
value = 1662; /* --> orr. */
|
||||||
break;
|
break;
|
||||||
case 1218: /* movs */
|
case 1209: /* mov */
|
||||||
case 1664: /* orrs */
|
case 1664: /* orr */
|
||||||
value = 1664; /* --> orrs. */
|
value = 1664; /* --> orr. */
|
||||||
break;
|
break;
|
||||||
case 1213: /* mov */
|
case 1219: /* movs */
|
||||||
case 1720: /* sel */
|
case 1665: /* orrs */
|
||||||
value = 1720; /* --> sel. */
|
value = 1665; /* --> orrs. */
|
||||||
break;
|
break;
|
||||||
case 1216: /* mov */
|
case 1214: /* mov */
|
||||||
case 1721: /* sel */
|
case 1721: /* sel */
|
||||||
value = 1721; /* --> sel. */
|
value = 1721; /* --> sel. */
|
||||||
break;
|
break;
|
||||||
|
case 1217: /* mov */
|
||||||
|
case 1722: /* sel */
|
||||||
|
value = 1722; /* --> sel. */
|
||||||
|
break;
|
||||||
default: return NULL;
|
default: return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -210,48 +210,48 @@ const struct aarch64_operand aarch64_operands[] =
|
|||||||
static const unsigned op_enum_table [] =
|
static const unsigned op_enum_table [] =
|
||||||
{
|
{
|
||||||
0,
|
0,
|
||||||
859,
|
|
||||||
860,
|
860,
|
||||||
861,
|
861,
|
||||||
864,
|
862,
|
||||||
865,
|
865,
|
||||||
866,
|
866,
|
||||||
867,
|
867,
|
||||||
868,
|
868,
|
||||||
862,
|
|
||||||
863,
|
|
||||||
869,
|
869,
|
||||||
|
863,
|
||||||
|
864,
|
||||||
870,
|
870,
|
||||||
892,
|
871,
|
||||||
893,
|
893,
|
||||||
894,
|
894,
|
||||||
897,
|
895,
|
||||||
898,
|
898,
|
||||||
899,
|
899,
|
||||||
900,
|
900,
|
||||||
901,
|
901,
|
||||||
895,
|
|
||||||
896,
|
|
||||||
902,
|
902,
|
||||||
|
896,
|
||||||
|
897,
|
||||||
903,
|
903,
|
||||||
948,
|
904,
|
||||||
949,
|
949,
|
||||||
950,
|
950,
|
||||||
951,
|
951,
|
||||||
|
952,
|
||||||
12,
|
12,
|
||||||
627,
|
627,
|
||||||
628,
|
628,
|
||||||
1143,
|
|
||||||
1145,
|
|
||||||
1147,
|
|
||||||
955,
|
|
||||||
1146,
|
|
||||||
1144,
|
1144,
|
||||||
|
1146,
|
||||||
|
1148,
|
||||||
|
956,
|
||||||
|
1147,
|
||||||
|
1145,
|
||||||
311,
|
311,
|
||||||
615,
|
615,
|
||||||
626,
|
626,
|
||||||
625,
|
625,
|
||||||
953,
|
954,
|
||||||
622,
|
622,
|
||||||
619,
|
619,
|
||||||
611,
|
611,
|
||||||
@ -261,13 +261,13 @@ static const unsigned op_enum_table [] =
|
|||||||
621,
|
621,
|
||||||
623,
|
623,
|
||||||
624,
|
624,
|
||||||
963,
|
964,
|
||||||
655,
|
655,
|
||||||
658,
|
658,
|
||||||
661,
|
661,
|
||||||
656,
|
656,
|
||||||
659,
|
659,
|
||||||
803,
|
804,
|
||||||
171,
|
171,
|
||||||
172,
|
172,
|
||||||
173,
|
173,
|
||||||
@ -278,17 +278,17 @@ static const unsigned op_enum_table [] =
|
|||||||
382,
|
382,
|
||||||
404,
|
404,
|
||||||
406,
|
406,
|
||||||
1208,
|
|
||||||
1213,
|
|
||||||
1206,
|
|
||||||
1205,
|
|
||||||
1209,
|
1209,
|
||||||
1216,
|
1214,
|
||||||
1218,
|
1207,
|
||||||
|
1206,
|
||||||
|
1210,
|
||||||
|
1217,
|
||||||
1219,
|
1219,
|
||||||
1215,
|
|
||||||
1221,
|
|
||||||
1220,
|
1220,
|
||||||
|
1216,
|
||||||
|
1222,
|
||||||
|
1221,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Given the opcode enumerator OP, return the pointer to the corresponding
|
/* Given the opcode enumerator OP, return the pointer to the corresponding
|
||||||
|
@ -318,6 +318,12 @@
|
|||||||
QLF2 (X, S_H), \
|
QLF2 (X, S_H), \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* e.g. FJCVTZS <Wd>, <Dn>. */
|
||||||
|
#define QL_FP2INT_W_D \
|
||||||
|
{ \
|
||||||
|
QLF2 (W, S_D), \
|
||||||
|
}
|
||||||
|
|
||||||
/* e.g. FMOV <Xd>, <Vn>.D[1]. */
|
/* e.g. FMOV <Xd>, <Vn>.D[1]. */
|
||||||
#define QL_XVD1 \
|
#define QL_XVD1 \
|
||||||
{ \
|
{ \
|
||||||
@ -1912,6 +1918,8 @@ static const aarch64_feature_set aarch64_feature_sve =
|
|||||||
AARCH64_FEATURE (AARCH64_FEATURE_SVE, 0);
|
AARCH64_FEATURE (AARCH64_FEATURE_SVE, 0);
|
||||||
static const aarch64_feature_set aarch64_feature_v8_3 =
|
static const aarch64_feature_set aarch64_feature_v8_3 =
|
||||||
AARCH64_FEATURE (AARCH64_FEATURE_V8_3, 0);
|
AARCH64_FEATURE (AARCH64_FEATURE_V8_3, 0);
|
||||||
|
static const aarch64_feature_set aarch64_feature_fp_v8_3 =
|
||||||
|
AARCH64_FEATURE (AARCH64_FEATURE_V8_3 | AARCH64_FEATURE_FP, 0);
|
||||||
|
|
||||||
#define CORE &aarch64_feature_v8
|
#define CORE &aarch64_feature_v8
|
||||||
#define FP &aarch64_feature_fp
|
#define FP &aarch64_feature_fp
|
||||||
@ -1928,6 +1936,7 @@ static const aarch64_feature_set aarch64_feature_v8_3 =
|
|||||||
#define ARMV8_2 &aarch64_feature_v8_2
|
#define ARMV8_2 &aarch64_feature_v8_2
|
||||||
#define SVE &aarch64_feature_sve
|
#define SVE &aarch64_feature_sve
|
||||||
#define ARMV8_3 &aarch64_feature_v8_3
|
#define ARMV8_3 &aarch64_feature_v8_3
|
||||||
|
#define FP_V8_3 &aarch64_feature_fp_v8_3
|
||||||
|
|
||||||
#define CORE_INSN(NAME,OPCODE,MASK,CLASS,OP,OPS,QUALS,FLAGS) \
|
#define CORE_INSN(NAME,OPCODE,MASK,CLASS,OP,OPS,QUALS,FLAGS) \
|
||||||
{ NAME, OPCODE, MASK, CLASS, OP, CORE, OPS, QUALS, FLAGS, 0, NULL }
|
{ NAME, OPCODE, MASK, CLASS, OP, CORE, OPS, QUALS, FLAGS, 0, NULL }
|
||||||
@ -2789,6 +2798,7 @@ struct aarch64_opcode aarch64_opcode_table[] =
|
|||||||
FF16_INSN ("fcvtzu",0x1ef90000, 0x7f3ffc00, float2int, OP2 (Rd, Fn), QL_FP2INT_H, F_FPTYPE | F_SF),
|
FF16_INSN ("fcvtzu",0x1ef90000, 0x7f3ffc00, float2int, OP2 (Rd, Fn), QL_FP2INT_H, F_FPTYPE | F_SF),
|
||||||
__FP_INSN ("fmov", 0x9eae0000, 0xfffffc00, float2int, 0, OP2 (Rd, VnD1), QL_XVD1, 0),
|
__FP_INSN ("fmov", 0x9eae0000, 0xfffffc00, float2int, 0, OP2 (Rd, VnD1), QL_XVD1, 0),
|
||||||
__FP_INSN ("fmov", 0x9eaf0000, 0xfffffc00, float2int, 0, OP2 (VdD1, Rn), QL_VD1X, 0),
|
__FP_INSN ("fmov", 0x9eaf0000, 0xfffffc00, float2int, 0, OP2 (VdD1, Rn), QL_VD1X, 0),
|
||||||
|
{"fjcvtzs", 0x1e7e0000, 0xfffffc00, float2int, 0, FP_V8_3, OP2 (Rd, Fn), QL_FP2INT_W_D, 0, 0, NULL },
|
||||||
/* Floating-point conditional compare. */
|
/* Floating-point conditional compare. */
|
||||||
__FP_INSN ("fccmp", 0x1e200400, 0xff200c10, floatccmp, 0, OP4 (Fn, Fm, NZCV, COND), QL_FCCMP, F_FPTYPE),
|
__FP_INSN ("fccmp", 0x1e200400, 0xff200c10, floatccmp, 0, OP4 (Fn, Fm, NZCV, COND), QL_FCCMP, F_FPTYPE),
|
||||||
FF16_INSN ("fccmp", 0x1ee00400, 0xff200c10, floatccmp, OP4 (Fn, Fm, NZCV, COND), QL_FCCMP_H, F_FPTYPE),
|
FF16_INSN ("fccmp", 0x1ee00400, 0xff200c10, floatccmp, OP4 (Fn, Fm, NZCV, COND), QL_FCCMP_H, F_FPTYPE),
|
||||||
|
Reference in New Issue
Block a user