[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:
Szabolcs Nagy 2016-11-18 09:53:45 +00:00
parent 3f06e55061
commit ccfc90a39b
14 changed files with 1815 additions and 1725 deletions

View File

@ -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>
* config/tc-aarch64.c (parse_operands): Handle AARCH64_OPND_ADDR_SIMM10.

View 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

View File

@ -0,0 +1,5 @@
/* ARMv8.3 Javascript conversion instruction. */
.text
fjcvtzs w1, d2
fjcvtzs w7, d7

View File

@ -0,0 +1,2 @@
#as: -march=armv8.3-a -mno-verbose-error
#error-output: illegal-fjcvtzs.l

View 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'

View 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

View File

@ -0,0 +1,2 @@
#as: -march=armv8.3-a+nofp -mno-verbose-error
#error-output: illegal-nofp-armv8_3.l

View 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'

View 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

View File

@ -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>
* aarch64-tbl.h (QL_X1NIL): New.

View File

@ -197,381 +197,381 @@ aarch64_find_real_opcode (const aarch64_opcode *opcode)
case 743: /* extr */
value = 743; /* --> extr. */
break;
case 953: /* bic */
case 952: /* and */
value = 952; /* --> and. */
break;
case 955: /* mov */
case 954: /* orr */
value = 954; /* --> orr. */
break;
case 958: /* tst */
case 957: /* ands */
value = 957; /* --> ands. */
break;
case 963: /* uxtw */
case 962: /* mov */
case 961: /* orr */
value = 961; /* --> orr. */
case 954: /* bic */
case 953: /* and */
value = 953; /* --> and. */
break;
case 956: /* mov */
case 955: /* orr */
value = 955; /* --> orr. */
break;
case 959: /* tst */
case 958: /* ands */
value = 958; /* --> ands. */
break;
case 964: /* uxtw */
case 963: /* mov */
case 962: /* orr */
value = 962; /* --> orr. */
break;
case 965: /* mvn */
case 964: /* orn */
value = 964; /* --> orn. */
case 966: /* mvn */
case 965: /* orn */
value = 965; /* --> orn. */
break;
case 969: /* tst */
case 968: /* ands */
value = 968; /* --> ands. */
case 970: /* tst */
case 969: /* ands */
value = 969; /* --> ands. */
break;
case 1095: /* staddb */
case 999: /* ldaddb */
value = 999; /* --> ldaddb. */
case 1096: /* staddb */
case 1000: /* ldaddb */
value = 1000; /* --> ldaddb. */
break;
case 1096: /* staddh */
case 1000: /* ldaddh */
value = 1000; /* --> ldaddh. */
case 1097: /* staddh */
case 1001: /* ldaddh */
value = 1001; /* --> ldaddh. */
break;
case 1097: /* stadd */
case 1001: /* ldadd */
value = 1001; /* --> ldadd. */
case 1098: /* stadd */
case 1002: /* ldadd */
value = 1002; /* --> ldadd. */
break;
case 1098: /* staddlb */
case 1003: /* ldaddlb */
value = 1003; /* --> ldaddlb. */
case 1099: /* staddlb */
case 1004: /* ldaddlb */
value = 1004; /* --> ldaddlb. */
break;
case 1099: /* staddlh */
case 1006: /* ldaddlh */
value = 1006; /* --> ldaddlh. */
case 1100: /* staddlh */
case 1007: /* ldaddlh */
value = 1007; /* --> ldaddlh. */
break;
case 1100: /* staddl */
case 1009: /* ldaddl */
value = 1009; /* --> ldaddl. */
case 1101: /* staddl */
case 1010: /* ldaddl */
value = 1010; /* --> ldaddl. */
break;
case 1101: /* stclrb */
case 1011: /* ldclrb */
value = 1011; /* --> ldclrb. */
case 1102: /* stclrb */
case 1012: /* ldclrb */
value = 1012; /* --> ldclrb. */
break;
case 1102: /* stclrh */
case 1012: /* ldclrh */
value = 1012; /* --> ldclrh. */
case 1103: /* stclrh */
case 1013: /* ldclrh */
value = 1013; /* --> ldclrh. */
break;
case 1103: /* stclr */
case 1013: /* ldclr */
value = 1013; /* --> ldclr. */
case 1104: /* stclr */
case 1014: /* ldclr */
value = 1014; /* --> ldclr. */
break;
case 1104: /* stclrlb */
case 1015: /* ldclrlb */
value = 1015; /* --> ldclrlb. */
case 1105: /* stclrlb */
case 1016: /* ldclrlb */
value = 1016; /* --> ldclrlb. */
break;
case 1105: /* stclrlh */
case 1018: /* ldclrlh */
value = 1018; /* --> ldclrlh. */
case 1106: /* stclrlh */
case 1019: /* ldclrlh */
value = 1019; /* --> ldclrlh. */
break;
case 1106: /* stclrl */
case 1021: /* ldclrl */
value = 1021; /* --> ldclrl. */
case 1107: /* stclrl */
case 1022: /* ldclrl */
value = 1022; /* --> ldclrl. */
break;
case 1107: /* steorb */
case 1023: /* ldeorb */
value = 1023; /* --> ldeorb. */
case 1108: /* steorb */
case 1024: /* ldeorb */
value = 1024; /* --> ldeorb. */
break;
case 1108: /* steorh */
case 1024: /* ldeorh */
value = 1024; /* --> ldeorh. */
case 1109: /* steorh */
case 1025: /* ldeorh */
value = 1025; /* --> ldeorh. */
break;
case 1109: /* steor */
case 1025: /* ldeor */
value = 1025; /* --> ldeor. */
case 1110: /* steor */
case 1026: /* ldeor */
value = 1026; /* --> ldeor. */
break;
case 1110: /* steorlb */
case 1027: /* ldeorlb */
value = 1027; /* --> ldeorlb. */
case 1111: /* steorlb */
case 1028: /* ldeorlb */
value = 1028; /* --> ldeorlb. */
break;
case 1111: /* steorlh */
case 1030: /* ldeorlh */
value = 1030; /* --> ldeorlh. */
case 1112: /* steorlh */
case 1031: /* ldeorlh */
value = 1031; /* --> ldeorlh. */
break;
case 1112: /* steorl */
case 1033: /* ldeorl */
value = 1033; /* --> ldeorl. */
case 1113: /* steorl */
case 1034: /* ldeorl */
value = 1034; /* --> ldeorl. */
break;
case 1113: /* stsetb */
case 1035: /* ldsetb */
value = 1035; /* --> ldsetb. */
case 1114: /* stsetb */
case 1036: /* ldsetb */
value = 1036; /* --> ldsetb. */
break;
case 1114: /* stseth */
case 1036: /* ldseth */
value = 1036; /* --> ldseth. */
case 1115: /* stseth */
case 1037: /* ldseth */
value = 1037; /* --> ldseth. */
break;
case 1115: /* stset */
case 1037: /* ldset */
value = 1037; /* --> ldset. */
case 1116: /* stset */
case 1038: /* ldset */
value = 1038; /* --> ldset. */
break;
case 1116: /* stsetlb */
case 1039: /* ldsetlb */
value = 1039; /* --> ldsetlb. */
case 1117: /* stsetlb */
case 1040: /* ldsetlb */
value = 1040; /* --> ldsetlb. */
break;
case 1117: /* stsetlh */
case 1042: /* ldsetlh */
value = 1042; /* --> ldsetlh. */
case 1118: /* stsetlh */
case 1043: /* ldsetlh */
value = 1043; /* --> ldsetlh. */
break;
case 1118: /* stsetl */
case 1045: /* ldsetl */
value = 1045; /* --> ldsetl. */
case 1119: /* stsetl */
case 1046: /* ldsetl */
value = 1046; /* --> ldsetl. */
break;
case 1119: /* stsmaxb */
case 1047: /* ldsmaxb */
value = 1047; /* --> ldsmaxb. */
case 1120: /* stsmaxb */
case 1048: /* ldsmaxb */
value = 1048; /* --> ldsmaxb. */
break;
case 1120: /* stsmaxh */
case 1048: /* ldsmaxh */
value = 1048; /* --> ldsmaxh. */
case 1121: /* stsmaxh */
case 1049: /* ldsmaxh */
value = 1049; /* --> ldsmaxh. */
break;
case 1121: /* stsmax */
case 1049: /* ldsmax */
value = 1049; /* --> ldsmax. */
break;
case 1122: /* stsmaxlb */
case 1051: /* ldsmaxlb */
value = 1051; /* --> ldsmaxlb. */
break;
case 1123: /* stsmaxlh */
case 1054: /* ldsmaxlh */
value = 1054; /* --> ldsmaxlh. */
break;
case 1124: /* stsmaxl */
case 1057: /* ldsmaxl */
value = 1057; /* --> ldsmaxl. */
break;
case 1125: /* stsminb */
case 1059: /* ldsminb */
value = 1059; /* --> ldsminb. */
break;
case 1126: /* stsminh */
case 1060: /* ldsminh */
value = 1060; /* --> ldsminh. */
break;
case 1127: /* stsmin */
case 1061: /* ldsmin */
value = 1061; /* --> ldsmin. */
break;
case 1128: /* stsminlb */
case 1063: /* ldsminlb */
value = 1063; /* --> ldsminlb. */
break;
case 1129: /* stsminlh */
case 1066: /* ldsminlh */
value = 1066; /* --> ldsminlh. */
break;
case 1130: /* stsminl */
case 1069: /* ldsminl */
value = 1069; /* --> ldsminl. */
break;
case 1131: /* stumaxb */
case 1071: /* ldumaxb */
value = 1071; /* --> ldumaxb. */
break;
case 1132: /* stumaxh */
case 1072: /* ldumaxh */
value = 1072; /* --> ldumaxh. */
break;
case 1133: /* stumax */
case 1073: /* ldumax */
value = 1073; /* --> ldumax. */
break;
case 1134: /* stumaxlb */
case 1075: /* ldumaxlb */
value = 1075; /* --> ldumaxlb. */
break;
case 1135: /* stumaxlh */
case 1078: /* ldumaxlh */
value = 1078; /* --> ldumaxlh. */
break;
case 1136: /* stumaxl */
case 1081: /* ldumaxl */
value = 1081; /* --> ldumaxl. */
break;
case 1137: /* stuminb */
case 1083: /* lduminb */
value = 1083; /* --> lduminb. */
break;
case 1138: /* stuminh */
case 1084: /* lduminh */
value = 1084; /* --> lduminh. */
break;
case 1139: /* stumin */
case 1085: /* ldumin */
value = 1085; /* --> ldumin. */
break;
case 1140: /* stuminlb */
case 1087: /* lduminlb */
value = 1087; /* --> lduminlb. */
break;
case 1141: /* stuminlh */
case 1090: /* lduminlh */
value = 1090; /* --> lduminlh. */
break;
case 1142: /* stuminl */
case 1093: /* lduminl */
value = 1093; /* --> lduminl. */
break;
case 1144: /* mov */
case 1143: /* movn */
value = 1143; /* --> movn. */
break;
case 1146: /* mov */
case 1145: /* movz */
value = 1145; /* --> movz. */
break;
case 1184: /* autibsp */
case 1183: /* autibz */
case 1182: /* autiasp */
case 1181: /* autiaz */
case 1180: /* pacibsp */
case 1179: /* pacibz */
case 1178: /* paciasp */
case 1177: /* paciaz */
case 1164: /* psb */
case 1163: /* esb */
case 1162: /* autib1716 */
case 1161: /* autia1716 */
case 1160: /* pacib1716 */
case 1159: /* pacia1716 */
case 1158: /* xpaclri */
case 1157: /* sevl */
case 1156: /* sev */
case 1155: /* wfi */
case 1154: /* wfe */
case 1153: /* yield */
case 1152: /* nop */
case 1151: /* hint */
value = 1151; /* --> hint. */
break;
case 1173: /* tlbi */
case 1172: /* ic */
case 1171: /* dc */
case 1170: /* at */
case 1169: /* sys */
value = 1169; /* --> sys. */
break;
case 1927: /* bic */
case 1232: /* and */
value = 1232; /* --> and. */
break;
case 1215: /* mov */
case 1234: /* and */
value = 1234; /* --> and. */
break;
case 1219: /* movs */
case 1235: /* ands */
value = 1235; /* --> ands. */
break;
case 1928: /* cmple */
case 1270: /* cmpge */
value = 1270; /* --> cmpge. */
break;
case 1931: /* cmplt */
case 1273: /* cmpgt */
value = 1273; /* --> cmpgt. */
break;
case 1929: /* cmplo */
case 1275: /* cmphi */
value = 1275; /* --> cmphi. */
break;
case 1930: /* cmpls */
case 1278: /* cmphs */
value = 1278; /* --> cmphs. */
break;
case 1212: /* mov */
case 1300: /* cpy */
value = 1300; /* --> cpy. */
break;
case 1214: /* mov */
case 1122: /* stsmax */
case 1050: /* ldsmax */
value = 1050; /* --> ldsmax. */
break;
case 1123: /* stsmaxlb */
case 1052: /* ldsmaxlb */
value = 1052; /* --> ldsmaxlb. */
break;
case 1124: /* stsmaxlh */
case 1055: /* ldsmaxlh */
value = 1055; /* --> ldsmaxlh. */
break;
case 1125: /* stsmaxl */
case 1058: /* ldsmaxl */
value = 1058; /* --> ldsmaxl. */
break;
case 1126: /* stsminb */
case 1060: /* ldsminb */
value = 1060; /* --> ldsminb. */
break;
case 1127: /* stsminh */
case 1061: /* ldsminh */
value = 1061; /* --> ldsminh. */
break;
case 1128: /* stsmin */
case 1062: /* ldsmin */
value = 1062; /* --> ldsmin. */
break;
case 1129: /* stsminlb */
case 1064: /* ldsminlb */
value = 1064; /* --> ldsminlb. */
break;
case 1130: /* stsminlh */
case 1067: /* ldsminlh */
value = 1067; /* --> ldsminlh. */
break;
case 1131: /* stsminl */
case 1070: /* ldsminl */
value = 1070; /* --> ldsminl. */
break;
case 1132: /* stumaxb */
case 1072: /* ldumaxb */
value = 1072; /* --> ldumaxb. */
break;
case 1133: /* stumaxh */
case 1073: /* ldumaxh */
value = 1073; /* --> ldumaxh. */
break;
case 1134: /* stumax */
case 1074: /* ldumax */
value = 1074; /* --> ldumax. */
break;
case 1135: /* stumaxlb */
case 1076: /* ldumaxlb */
value = 1076; /* --> ldumaxlb. */
break;
case 1136: /* stumaxlh */
case 1079: /* ldumaxlh */
value = 1079; /* --> ldumaxlh. */
break;
case 1137: /* stumaxl */
case 1082: /* ldumaxl */
value = 1082; /* --> ldumaxl. */
break;
case 1138: /* stuminb */
case 1084: /* lduminb */
value = 1084; /* --> lduminb. */
break;
case 1139: /* stuminh */
case 1085: /* lduminh */
value = 1085; /* --> lduminh. */
break;
case 1140: /* stumin */
case 1086: /* ldumin */
value = 1086; /* --> ldumin. */
break;
case 1141: /* stuminlb */
case 1088: /* lduminlb */
value = 1088; /* --> lduminlb. */
break;
case 1142: /* stuminlh */
case 1091: /* lduminlh */
value = 1091; /* --> lduminlh. */
break;
case 1143: /* stuminl */
case 1094: /* lduminl */
value = 1094; /* --> lduminl. */
break;
case 1145: /* mov */
case 1144: /* movn */
value = 1144; /* --> movn. */
break;
case 1147: /* mov */
case 1146: /* movz */
value = 1146; /* --> movz. */
break;
case 1185: /* autibsp */
case 1184: /* autibz */
case 1183: /* autiasp */
case 1182: /* autiaz */
case 1181: /* pacibsp */
case 1180: /* pacibz */
case 1179: /* paciasp */
case 1178: /* paciaz */
case 1165: /* psb */
case 1164: /* esb */
case 1163: /* autib1716 */
case 1162: /* autia1716 */
case 1161: /* pacib1716 */
case 1160: /* pacia1716 */
case 1159: /* xpaclri */
case 1158: /* sevl */
case 1157: /* sev */
case 1156: /* wfi */
case 1155: /* wfe */
case 1154: /* yield */
case 1153: /* nop */
case 1152: /* hint */
value = 1152; /* --> hint. */
break;
case 1174: /* tlbi */
case 1173: /* ic */
case 1172: /* dc */
case 1171: /* at */
case 1170: /* sys */
value = 1170; /* --> sys. */
break;
case 1928: /* bic */
case 1233: /* and */
value = 1233; /* --> and. */
break;
case 1216: /* mov */
case 1235: /* and */
value = 1235; /* --> and. */
break;
case 1220: /* movs */
case 1236: /* ands */
value = 1236; /* --> ands. */
break;
case 1929: /* cmple */
case 1271: /* cmpge */
value = 1271; /* --> cmpge. */
break;
case 1932: /* cmplt */
case 1274: /* cmpgt */
value = 1274; /* --> cmpgt. */
break;
case 1930: /* cmplo */
case 1276: /* cmphi */
value = 1276; /* --> cmphi. */
break;
case 1931: /* cmpls */
case 1279: /* cmphs */
value = 1279; /* --> cmphs. */
break;
case 1213: /* mov */
case 1301: /* cpy */
value = 1301; /* --> cpy. */
break;
case 1938: /* fmov */
case 1217: /* mov */
case 1215: /* mov */
case 1302: /* cpy */
value = 1302; /* --> cpy. */
break;
case 1207: /* mov */
case 1314: /* dup */
value = 1314; /* --> dup. */
case 1939: /* fmov */
case 1218: /* mov */
case 1303: /* cpy */
value = 1303; /* --> cpy. */
break;
case 1209: /* mov */
case 1206: /* mov */
case 1208: /* mov */
case 1315: /* dup */
value = 1315; /* --> dup. */
break;
case 1937: /* fmov */
case 1211: /* mov */
case 1210: /* mov */
case 1207: /* mov */
case 1316: /* dup */
value = 1316; /* --> dup. */
break;
case 1210: /* mov */
case 1317: /* dupm */
value = 1317; /* --> dupm. */
case 1938: /* fmov */
case 1212: /* mov */
case 1317: /* dup */
value = 1317; /* --> dup. */
break;
case 1932: /* eon */
case 1319: /* eor */
value = 1319; /* --> eor. */
case 1211: /* mov */
case 1318: /* dupm */
value = 1318; /* --> dupm. */
break;
case 1220: /* not */
case 1321: /* eor */
value = 1321; /* --> eor. */
case 1933: /* eon */
case 1320: /* eor */
value = 1320; /* --> eor. */
break;
case 1221: /* nots */
case 1322: /* eors */
value = 1322; /* --> eors. */
case 1221: /* not */
case 1322: /* eor */
value = 1322; /* --> eor. */
break;
case 1933: /* facle */
case 1327: /* facge */
value = 1327; /* --> facge. */
case 1222: /* nots */
case 1323: /* eors */
value = 1323; /* --> eors. */
break;
case 1934: /* faclt */
case 1328: /* facgt */
value = 1328; /* --> facgt. */
case 1934: /* facle */
case 1328: /* facge */
value = 1328; /* --> facge. */
break;
case 1935: /* fcmle */
case 1337: /* fcmge */
value = 1337; /* --> fcmge. */
case 1935: /* faclt */
case 1329: /* facgt */
value = 1329; /* --> facgt. */
break;
case 1936: /* fcmlt */
case 1339: /* fcmgt */
value = 1339; /* --> fcmgt. */
case 1936: /* fcmle */
case 1338: /* fcmge */
value = 1338; /* --> fcmge. */
break;
case 1937: /* fcmlt */
case 1340: /* fcmgt */
value = 1340; /* --> fcmgt. */
break;
case 1205: /* fmov */
case 1346: /* fcpy */
value = 1346; /* --> fcpy. */
break;
case 1204: /* fmov */
case 1345: /* fcpy */
value = 1345; /* --> fcpy. */
case 1363: /* fdup */
value = 1363; /* --> fdup. */
break;
case 1203: /* fmov */
case 1362: /* fdup */
value = 1362; /* --> fdup. */
break;
case 1205: /* mov */
case 1660: /* orr */
value = 1660; /* --> orr. */
break;
case 1939: /* orn */
case 1206: /* mov */
case 1661: /* orr */
value = 1661; /* --> orr. */
break;
case 1208: /* mov */
case 1663: /* orr */
value = 1663; /* --> orr. */
case 1940: /* orn */
case 1662: /* orr */
value = 1662; /* --> orr. */
break;
case 1218: /* movs */
case 1664: /* orrs */
value = 1664; /* --> orrs. */
case 1209: /* mov */
case 1664: /* orr */
value = 1664; /* --> orr. */
break;
case 1213: /* mov */
case 1720: /* sel */
value = 1720; /* --> sel. */
case 1219: /* movs */
case 1665: /* orrs */
value = 1665; /* --> orrs. */
break;
case 1216: /* mov */
case 1214: /* mov */
case 1721: /* sel */
value = 1721; /* --> sel. */
break;
case 1217: /* mov */
case 1722: /* sel */
value = 1722; /* --> sel. */
break;
default: return NULL;
}

File diff suppressed because it is too large Load Diff

View File

@ -210,48 +210,48 @@ const struct aarch64_operand aarch64_operands[] =
static const unsigned op_enum_table [] =
{
0,
859,
860,
861,
864,
862,
865,
866,
867,
868,
862,
863,
869,
863,
864,
870,
892,
871,
893,
894,
897,
895,
898,
899,
900,
901,
895,
896,
902,
896,
897,
903,
948,
904,
949,
950,
951,
952,
12,
627,
628,
1143,
1145,
1147,
955,
1146,
1144,
1146,
1148,
956,
1147,
1145,
311,
615,
626,
625,
953,
954,
622,
619,
611,
@ -261,13 +261,13 @@ static const unsigned op_enum_table [] =
621,
623,
624,
963,
964,
655,
658,
661,
656,
659,
803,
804,
171,
172,
173,
@ -278,17 +278,17 @@ static const unsigned op_enum_table [] =
382,
404,
406,
1208,
1213,
1206,
1205,
1209,
1216,
1218,
1214,
1207,
1206,
1210,
1217,
1219,
1215,
1221,
1220,
1216,
1222,
1221,
};
/* Given the opcode enumerator OP, return the pointer to the corresponding

View File

@ -318,6 +318,12 @@
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]. */
#define QL_XVD1 \
{ \
@ -1912,6 +1918,8 @@ static const aarch64_feature_set aarch64_feature_sve =
AARCH64_FEATURE (AARCH64_FEATURE_SVE, 0);
static const aarch64_feature_set aarch64_feature_v8_3 =
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 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 SVE &aarch64_feature_sve
#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) \
{ 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),
__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),
{"fjcvtzs", 0x1e7e0000, 0xfffffc00, float2int, 0, FP_V8_3, OP2 (Rd, Fn), QL_FP2INT_W_D, 0, 0, NULL },
/* Floating-point conditional compare. */
__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),