[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> 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.

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> 2016-11-18 Szabolcs Nagy <szabolcs.nagy@arm.com>
* aarch64-tbl.h (QL_X1NIL): New. * aarch64-tbl.h (QL_X1NIL): New.

View File

@ -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

View File

@ -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

View File

@ -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),