summaryrefslogtreecommitdiff
path: root/arm/gen/trans_sail.hgen
diff options
context:
space:
mode:
Diffstat (limited to 'arm/gen/trans_sail.hgen')
-rw-r--r--arm/gen/trans_sail.hgen379
1 files changed, 379 insertions, 0 deletions
diff --git a/arm/gen/trans_sail.hgen b/arm/gen/trans_sail.hgen
new file mode 100644
index 00000000..2b176308
--- /dev/null
+++ b/arm/gen/trans_sail.hgen
@@ -0,0 +1,379 @@
+| `AArch64TMStart t ->
+ ("TMStart", [translate_reg "t" t], [])
+
+| `AArch64TMCommit -> ("TMCommit", [], [])
+
+| `AArch64TMAbort (retry,reason) ->
+ ("TMAbort",
+ [ translate_boolean "retry" retry;
+ translate_bit5 "reason" reason],
+ [])
+
+| `AArch64TMTest -> ("TMTest", [], [])
+
+
+| `AArch64ImplementationDefinedStopFetching ->
+ ("ImplementationDefinedStopFetching",
+ [],
+ [])
+
+| `AArch64ImplementationDefinedThreadStart ->
+ ("ImplementationDefinedThreadStart",
+ [],
+ [])
+
+| `AArch64ImplementationDefinedTestBeginEnd(isEnd) ->
+ ("ImplementationDefinedTestBeginEnd",
+ [translate_boolean "isEnd" isEnd],
+ [])
+
+| `AArch64AddSubCarry(d,n,m,datasize,sub_op,setflags) ->
+ ("AddSubCarry",
+ [translate_reg "d" d;
+ translate_reg "n" n;
+ translate_reg "m" m;
+ translate_reg_size "datasize" datasize;
+ translate_boolean "sub_op" sub_op;
+ translate_boolean "setflags" setflags],
+ [])
+
+| `AArch64AddSubExtendRegister (d,n,m,datasize,sub_op,setflags,extend_type,shift) ->
+ ("AddSubExtendRegister",
+ [translate_reg "d" d;
+ translate_reg "n" n;
+ translate_reg "m" m;
+ translate_reg_size "datasize" datasize;
+ translate_boolean "sub_op" sub_op;
+ translate_boolean "setflags" setflags;
+ translate_extendType "extend_type" extend_type;
+ translate_range0_7 "shift" shift],
+ [])
+
+| `AArch64AddSubShiftedRegister (d,n,m,datasize,sub_op,setflags,shift_type,shift_amount) ->
+ ("AddSubShiftedRegister",
+ [translate_reg "d" d;
+ translate_reg "n" n;
+ translate_reg "m" m;
+ translate_reg_size "datasize" datasize;
+ translate_boolean "sub_op" sub_op;
+ translate_boolean "setflags" setflags;
+ translate_shiftType "shift_type" shift_type;
+ translate_range0_63 "shift_amount" shift_amount],
+ [])
+
+| `AArch64AddSubImmediate (d,n,datasize,sub_op,setflags,imm) ->
+ ("AddSubImmediate",
+ [translate_reg "d" d;
+ translate_reg "n" n;
+ translate_reg_size "datasize" datasize;
+ translate_boolean "sub_op" sub_op;
+ translate_boolean "setflags" setflags;
+ translate_reg_size_bits "imm" imm],
+ [])
+
+| `AArch64Address (d,page,imm) ->
+ ("Address",
+ [translate_reg "d" d;
+ translate_boolean "page" page;
+ translate_bit64 "imm" imm],
+ [])
+
+| `AArch64LogicalImmediate (d,n,datasize,setflags,op,imm) ->
+ ("LogicalImmediate",
+ [translate_reg "d" d;
+ translate_reg "n" n;
+ translate_reg_size "datasize" datasize;
+ translate_boolean "setflags" setflags;
+ translate_logicalOp "op" op;
+ translate_reg_size_bits "imm" imm],
+ [])
+
+| `AArch64LogicalShiftedRegister (d,n,m,datasize,setflags,op,shift_type,shift_amount,invert) ->
+ ("LogicalShiftedRegister",
+ [translate_reg "d" d;
+ translate_reg "n" n;
+ translate_reg "m" m;
+ translate_reg_size "datasize" datasize;
+ translate_boolean "setflags" setflags;
+ translate_logicalOp "op" op;
+ translate_shiftType "shift_type" shift_type;
+ translate_range0_63 "shift_amount" shift_amount;
+ translate_boolean "invert" invert],
+ [])
+
+| `AArch64Shift (d,n,m,datasize,shift_type) ->
+ ("Shift",
+ [translate_reg "d" d;
+ translate_reg "n" n;
+ translate_reg "m" m;
+ translate_reg_size "datasize" datasize;
+ translate_shiftType "shift_type" shift_type],
+ [])
+
+| `AArch64BranchConditional (offset,condition) ->
+ ("BranchConditional",
+ [translate_bit64 "offset" offset;
+ translate_bit4 "condition" condition],
+ [])
+
+| `AArch64BranchImmediate (branch_type,offset) ->
+ ("BranchImmediate",
+ [translate_branchType "branch_type" branch_type;
+ translate_bit64 "offset" offset],
+ [])
+
+| `AArch64BitfieldMove (d,n,datasize,inzero,extend,_R,_S,wmask,tmask) ->
+ ("BitfieldMove",
+ [translate_reg "d" d;
+ translate_reg "n" n;
+ translate_reg_size "datasize" datasize;
+ translate_boolean "inzero" inzero;
+ translate_boolean "extend" extend;
+ translate_uinteger "_R" _R;
+ translate_uinteger "_S" _S;
+ translate_reg_size_bits "wmask" wmask;
+ translate_reg_size_bits "tmask" tmask],
+ [])
+
+| `AArch64BranchRegister (n,branch_type) ->
+ ("BranchRegister",
+ [translate_reg "n" n;
+ translate_branchType "branch_type" branch_type],
+ [])
+
+| `AArch64CompareAndBranch (t,datasize,iszero,offset) ->
+ ("CompareAndBranch",
+ [translate_reg "t" t;
+ translate_reg_size "datasize" datasize;
+ translate_boolean "iszero" iszero;
+ translate_bit64 "offset" offset],
+ [])
+
+| `AArch64ConditionalCompareImmediate (n,datasize,sub_op,condition,flags,imm) ->
+ ("ConditionalCompareImmediate",
+ [translate_reg "n" n;
+ translate_reg_size "datasize" datasize;
+ translate_boolean "sub_op" sub_op;
+ translate_bit4 "condition" condition;
+ translate_bit4 "flags" flags;
+ translate_reg_size_bits "imm" imm],
+ [])
+
+| `AArch64ConditionalCompareRegister (n,m,datasize,sub_op,condition,flags) ->
+ ("ConditionalCompareRegister",
+ [translate_reg "n" n;
+ translate_reg "m" m;
+ translate_reg_size "datasize" datasize;
+ translate_boolean "sub_op" sub_op;
+ translate_bit4 "condition" condition;
+ translate_bit4 "flags" flags],
+ [])
+
+| `AArch64ClearExclusiveMonitor (imm) ->
+ ("ClearExclusiveMonitor",
+ [translate_uinteger "imm" imm],
+ [])
+
+| `AArch64CountLeading (d,n,datasize,opcode) ->
+ ("CountLeading",
+ [translate_reg "d" d;
+ translate_reg "n" n;
+ translate_reg_size "datasize" datasize;
+ translate_countOp "opcode" opcode],
+ [])
+
+| `AArch64CRC (d,n,m,size,crc32c) ->
+ ("CRC",
+ [translate_reg "d" d;
+ translate_reg "n" n;
+ translate_reg "m" m;
+ translate_data_size "size" size;
+ translate_boolean "crc32c" crc32c],
+ [])
+
+| `AArch64ConditionalSelect (d,n,m,datasize,condition,else_inv,else_inc) ->
+ ("ConditionalSelect",
+ [translate_reg "d" d;
+ translate_reg "n" n;
+ translate_reg "m" m;
+ translate_reg_size "datasize" datasize;
+ translate_bit4 "condition" condition;
+ translate_boolean "else_inv" else_inv;
+ translate_boolean "else_inc" else_inc],
+ [])
+
+| `AArch64Barrier (op,domain,types) ->
+ ("Barrier",
+ [translate_memBarrierOp "op" op;
+ translate_mBReqDomain "domain" domain;
+ translate_mBReqTypes "types" types],
+ [])
+
+| `AArch64ExtractRegister (d,n,m,datasize,lsb) ->
+ ("ExtractRegister",
+ [translate_reg "d" d;
+ translate_reg "n" n;
+ translate_reg "m" m;
+ translate_reg_size "datasize" datasize;
+ translate_uinteger "lsb" lsb],
+ [])
+
+| `AArch64Hint (op) ->
+ ("Hint",
+ [translate_systemHintOp "op" op],
+ [])
+
+| `AArch64LoadStoreAcqExc (n,t,t2,s,acctype,excl,pair,memop,elsize,regsize,datasize) ->
+ ("LoadStoreAcqExc",
+ [translate_reg "n" n;
+ translate_reg "t" t;
+ translate_reg "t2" t2;
+ translate_reg "s" s;
+ translate_accType "acctype" acctype;
+ translate_boolean "excl" excl;
+ translate_boolean "pair" pair;
+ translate_memOp "memop" memop;
+ translate_uinteger "elsize" elsize;
+ translate_reg_size "regsize" regsize;
+ translate_data_size "datasize" datasize],
+ [])
+
+| `AArch64LoadStorePair (wback,postindex,n,t,t2,acctype,memop,signed,datasize,offset) ->
+ ("LoadStorePair",
+ [translate_boolean "wback" wback;
+ translate_boolean "postindex" postindex;
+ translate_reg "n" n;
+ translate_reg "t" t;
+ translate_reg "t2" t2;
+ translate_accType "acctype" acctype;
+ translate_memOp "memop" memop;
+ translate_boolean "signed" signed;
+ translate_data_size "datasize" datasize;
+ translate_bit64 "offset" offset],
+ [])
+
+| `AArch64LoadImmediate (n,t,acctype,memop,signed,wback,postindex,offset,regsize,datasize) ->
+ ("LoadImmediate",
+ [translate_reg "n" n;
+ translate_reg "t" t;
+ translate_accType "acctype" acctype;
+ translate_memOp "memop" memop;
+ translate_boolean "signed" signed;
+ translate_boolean "wback" wback;
+ translate_boolean "postindex" postindex;
+ translate_bit64 "offset" offset;
+ translate_reg_size "regsize" regsize;
+ translate_data_size "datasize" datasize],
+ [])
+
+| `AArch64LoadLiteral (t,memop,signed,size,offset,datasize) ->
+ ("LoadLiteral",
+ [translate_reg "t" t;
+ translate_memOp "memop" memop;
+ translate_boolean "signed" signed;
+ translate_uinteger "size" size;
+ translate_bit64 "offset" offset;
+ translate_data_size "datasize" datasize;],
+ [])
+
+| `AArch64LoadRegister (n,t,m,acctype,memop,signed,wback,postindex,extend_type,shift,regsize,datasize) ->
+ ("LoadRegister",
+ [translate_reg "n" n;
+ translate_reg "t" t;
+ translate_reg "m" m;
+ translate_accType "acctype" acctype;
+ translate_memOp "memop" memop;
+ translate_boolean "signed" signed;
+ translate_boolean "wback" wback;
+ translate_boolean "postindex" postindex;
+ translate_extendType "extend_type" extend_type;
+ translate_uinteger "shift" shift;
+ translate_reg_size "regsize" regsize;
+ translate_data_size "datasize" datasize],
+ [])
+
+| `AArch64MultiplyAddSub (d,n,m,a,destsize,datasize,sub_op) ->
+ ("MultiplyAddSub",
+ [translate_reg "d" d;
+ translate_reg "n" n;
+ translate_reg "m" m;
+ translate_reg "a" a;
+ translate_reg_size "destsize" destsize;
+ translate_data_size "datasize" datasize;
+ translate_boolean "sub_op" sub_op],
+ [])
+
+| `AArch64MoveWide (d,datasize,imm,pos,opcode) ->
+ ("MoveWide",
+ [translate_reg "d" d;
+ translate_reg_size "datasize" datasize;
+ translate_bit16 "imm" imm;
+ translate_uinteger "pos" pos;
+ translate_moveWideOp "opcode" opcode],
+ [])
+
+| `AArch64Reverse (d,n,datasize,op) ->
+ ("Reverse",
+ [translate_reg "d" d;
+ translate_reg "n" n;
+ translate_reg_size "datasize" datasize;
+ translate_revOp "op" op],
+ [])
+
+| `AArch64Division (d,n,m,datasize,unsigned) ->
+ ("Division",
+ [translate_reg "d" d;
+ translate_reg "n" n;
+ translate_reg "m" m;
+ translate_reg_size "datasize" datasize;
+ translate_boolean "unsigned" unsigned],
+ [])
+
+| `AArch64MultiplyAddSubLong (d,n,m,a,destsize,datasize,sub_op,unsigned) ->
+ ("MultiplyAddSubLong",
+ [translate_reg "d" d;
+ translate_reg "n" n;
+ translate_reg "m" m;
+ translate_reg "a" a;
+ translate_reg_size "destsize" destsize;
+ translate_data_size "datasize" datasize;
+ translate_boolean "sub_op" sub_op;
+ translate_boolean "unsigned" unsigned],
+ [])
+
+| `AArch64MultiplyHigh (d,n,m,a,destsize,datasize,unsigned) ->
+ ("MultiplyHigh",
+ [translate_reg "d" d;
+ translate_reg "n" n;
+ translate_reg "m" m;
+ translate_reg "a" a;
+ translate_reg_size "destsize" destsize;
+ translate_data_size "datasize" datasize;
+ translate_boolean "unsigned" unsigned],
+ [])
+
+| `AArch64TestBitAndBranch (t,datasize,bit_pos,bit_val,offset) ->
+ ("TestBitAndBranch",
+ [translate_reg "t" t;
+ translate_reg_size "datasize" datasize;
+ translate_uinteger "bit_pos" bit_pos;
+ translate_bit "bit_val" bit_val;
+ translate_bit64 "offset" offset],
+ [])
+
+| `AArch64MoveSystemRegister (t,sys_op0,sys_op1,sys_op2,sys_crn,sys_crm,read) ->
+ ("MoveSystemRegister",
+ [translate_reg "t" t;
+ translate_uinteger "sys_op0" sys_op0;
+ translate_uinteger "sys_op1" sys_op1;
+ translate_uinteger "sys_op2" sys_op2;
+ translate_uinteger "sys_crn" sys_crn;
+ translate_uinteger "sys_crm" sys_crm;
+ translate_boolean "read" read],
+ [])
+
+| `AArch64MoveSystemImmediate (operand,field) ->
+ ("MoveSystemImmediate",
+ [translate_bit4 "operand" operand;
+ translate_pSTATEField "field" field],
+ [])