summaryrefslogtreecommitdiff
path: root/src/arch/arm
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/arm')
-rw-r--r--src/arch/arm/isa/operands.isa114
1 files changed, 66 insertions, 48 deletions
diff --git a/src/arch/arm/isa/operands.isa b/src/arch/arm/isa/operands.isa
index 3c231b9ad..dc54ec2d5 100644
--- a/src/arch/arm/isa/operands.isa
+++ b/src/arch/arm/isa/operands.isa
@@ -260,53 +260,71 @@ def operands {{
'FpCondCodes': ccReg('CCREG_FP'),
#Abstracted floating point reg operands
- 'FpDest': floatReg('(dest + 0)'),
- 'FpDestP0': floatReg('(dest + 0)'),
- 'FpDestP1': floatReg('(dest + 1)'),
- 'FpDestP2': floatReg('(dest + 2)'),
- 'FpDestP3': floatReg('(dest + 3)'),
- 'FpDestP4': floatReg('(dest + 4)'),
- 'FpDestP5': floatReg('(dest + 5)'),
- 'FpDestP6': floatReg('(dest + 6)'),
- 'FpDestP7': floatReg('(dest + 7)'),
- 'FpDestS0P0': floatReg('(dest + step * 0 + 0)'),
- 'FpDestS0P1': floatReg('(dest + step * 0 + 1)'),
- 'FpDestS1P0': floatReg('(dest + step * 1 + 0)'),
- 'FpDestS1P1': floatReg('(dest + step * 1 + 1)'),
- 'FpDestS2P0': floatReg('(dest + step * 2 + 0)'),
- 'FpDestS2P1': floatReg('(dest + step * 2 + 1)'),
- 'FpDestS3P0': floatReg('(dest + step * 3 + 0)'),
- 'FpDestS3P1': floatReg('(dest + step * 3 + 1)'),
-
- 'FpDest2': floatReg('(dest2 + 0)'),
- 'FpDest2P0': floatReg('(dest2 + 0)'),
- 'FpDest2P1': floatReg('(dest2 + 1)'),
- 'FpDest2P2': floatReg('(dest2 + 2)'),
- 'FpDest2P3': floatReg('(dest2 + 3)'),
-
- 'FpOp1': floatReg('(op1 + 0)'),
- 'FpOp1P0': floatReg('(op1 + 0)'),
- 'FpOp1P1': floatReg('(op1 + 1)'),
- 'FpOp1P2': floatReg('(op1 + 2)'),
- 'FpOp1P3': floatReg('(op1 + 3)'),
- 'FpOp1P4': floatReg('(op1 + 4)'),
- 'FpOp1P5': floatReg('(op1 + 5)'),
- 'FpOp1P6': floatReg('(op1 + 6)'),
- 'FpOp1P7': floatReg('(op1 + 7)'),
- 'FpOp1S0P0': floatReg('(op1 + step * 0 + 0)'),
- 'FpOp1S0P1': floatReg('(op1 + step * 0 + 1)'),
- 'FpOp1S1P0': floatReg('(op1 + step * 1 + 0)'),
- 'FpOp1S1P1': floatReg('(op1 + step * 1 + 1)'),
- 'FpOp1S2P0': floatReg('(op1 + step * 2 + 0)'),
- 'FpOp1S2P1': floatReg('(op1 + step * 2 + 1)'),
- 'FpOp1S3P0': floatReg('(op1 + step * 3 + 0)'),
- 'FpOp1S3P1': floatReg('(op1 + step * 3 + 1)'),
-
- 'FpOp2': floatReg('(op2 + 0)'),
- 'FpOp2P0': floatReg('(op2 + 0)'),
- 'FpOp2P1': floatReg('(op2 + 1)'),
- 'FpOp2P2': floatReg('(op2 + 2)'),
- 'FpOp2P3': floatReg('(op2 + 3)'),
+ 'FpDest': vectorElem('dest / 4', 'dest % 4'),
+ 'FpDestP0': vectorElem('dest / 4', '(dest % 4) + 0'),
+ 'FpDestP1': vectorElem('dest / 4', '(dest % 4) + 1'),
+ 'FpDestP2': vectorElem('dest / 4', '(dest % 4) + 2'),
+ 'FpDestP3': vectorElem('dest / 4', '(dest % 4) + 3'),
+ 'FpDestP4': vectorElem('(dest / 4) + 1', '(dest % 4) + 0'),
+ 'FpDestP5': vectorElem('(dest / 4) + 1', '(dest % 4) + 1'),
+ 'FpDestP6': vectorElem('(dest / 4) + 1', '(dest % 4) + 2'),
+ 'FpDestP7': vectorElem('(dest / 4) + 1', '(dest % 4) + 3'),
+
+ 'FpDestS0P0': vectorElem(
+ '(dest + step * 0 + 0) / 4', '(dest + step * 0 + 0) % 4'),
+ 'FpDestS0P1': vectorElem(
+ '(dest + step * 0 + 1) / 4', '(dest + step * 0 + 1) % 4'),
+ 'FpDestS1P0': vectorElem(
+ '(dest + step * 1 + 0) / 4', '(dest + step * 1 + 0) % 4'),
+ 'FpDestS1P1': vectorElem(
+ '(dest + step * 1 + 1) / 4', '(dest + step * 1 + 1) % 4'),
+ 'FpDestS2P0': vectorElem(
+ '(dest + step * 2 + 0) / 4', '(dest + step * 2 + 0) % 4'),
+ 'FpDestS2P1': vectorElem(
+ '(dest + step * 2 + 1) / 4', '(dest + step * 2 + 1) % 4'),
+ 'FpDestS3P0': vectorElem(
+ '(dest + step * 3 + 0) / 4', '(dest + step * 3 + 0) % 4'),
+ 'FpDestS3P1': vectorElem(
+ '(dest + step * 3 + 1) / 4', '(dest + step * 3 + 1) % 4'),
+
+ 'FpDest2': vectorElem('dest2 / 4', 'dest2 % 4'),
+ 'FpDest2P0': vectorElem('dest2 / 4', '(dest2 % 4) + 0'),
+ 'FpDest2P1': vectorElem('dest2 / 4', '(dest2 % 4) + 1'),
+ 'FpDest2P2': vectorElem('dest2 / 4', '(dest2 % 4) + 2'),
+ 'FpDest2P3': vectorElem('dest2 / 4', '(dest2 % 4) + 3'),
+
+ 'FpOp1': vectorElem('op1 / 4', 'op1 % 4'),
+ 'FpOp1P0': vectorElem('op1 / 4', '(op1 % 4) + 0'),
+ 'FpOp1P1': vectorElem('op1 / 4', '(op1 % 4) + 1'),
+ 'FpOp1P2': vectorElem('op1 / 4', '(op1 % 4) + 2'),
+ 'FpOp1P3': vectorElem('op1 / 4', '(op1 % 4) + 3'),
+ 'FpOp1P4': vectorElem('(op1 / 4) + 1', '(op1 % 4) + 0'),
+ 'FpOp1P5': vectorElem('(op1 / 4) + 1', '(op1 % 4) + 1'),
+ 'FpOp1P6': vectorElem('(op1 / 4) + 1', '(op1 % 4) + 2'),
+ 'FpOp1P7': vectorElem('(op1 / 4) + 1', '(op1 % 4) + 3'),
+
+ 'FpOp1S0P0': vectorElem(
+ '(op1 + step * 0 + 0) / 4', '(op1 + step * 0 + 0) % 4'),
+ 'FpOp1S0P1': vectorElem(
+ '(op1 + step * 0 + 1) / 4', '(op1 + step * 0 + 1) % 4'),
+ 'FpOp1S1P0': vectorElem(
+ '(op1 + step * 1 + 0) / 4', '(op1 + step * 1 + 0) % 4'),
+ 'FpOp1S1P1': vectorElem(
+ '(op1 + step * 1 + 1) / 4', '(op1 + step * 1 + 1) % 4'),
+ 'FpOp1S2P0': vectorElem(
+ '(op1 + step * 2 + 0) / 4', '(op1 + step * 2 + 0) % 4'),
+ 'FpOp1S2P1': vectorElem(
+ '(op1 + step * 2 + 1) / 4', '(op1 + step * 2 + 1) % 4'),
+ 'FpOp1S3P0': vectorElem(
+ '(op1 + step * 3 + 0) / 4', '(op1 + step * 3 + 0) % 4'),
+ 'FpOp1S3P1': vectorElem(
+ '(op1 + step * 3 + 1) / 4', '(op1 + step * 3 + 1) % 4'),
+
+ 'FpOp2': vectorElem('op2 / 4', 'op2 % 4'),
+ 'FpOp2P0': vectorElem('op2 / 4', '(op2 % 4) + 0'),
+ 'FpOp2P1': vectorElem('op2 / 4', '(op2 % 4) + 1'),
+ 'FpOp2P2': vectorElem('op2 / 4', '(op2 % 4) + 2'),
+ 'FpOp2P3': vectorElem('op2 / 4', '(op2 % 4) + 3'),
# Create AArch64 unpacked view of the FP registers
# Name ::= 'AA64Vec' OpSpec [LaneSpec]
@@ -548,7 +566,7 @@ def operands {{
'XURa' : intRegX64('ura'),
'WURa' : intRegW64('ura'),
'IWRa' : intRegIWPC('ura'),
- 'Fa' : floatReg('ura'),
+ 'Fa' : vectorElem('ura / 4', 'ura % 4'),
'URb' : intReg('urb'),
'XURb' : intRegX64('urb'),
'URc' : intReg('urc'),