mirror of
https://github.com/RRZE-HPC/OSACA.git
synced 2026-01-06 11:10:06 +01:00
RISCV.yml file has been updated.
This commit is contained in:
@@ -22,6 +22,16 @@ instruction_forms:
|
|||||||
imd: 'int'
|
imd: 'int'
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "op1['value'] = op2['value'] + op3['value']; op1['name'] = op2['name']"
|
||||||
|
hidden_operands:
|
||||||
|
- class: flag
|
||||||
|
name: "Z"
|
||||||
|
source: false
|
||||||
|
destination: true
|
||||||
|
- class: flag
|
||||||
|
name: "N"
|
||||||
|
source: false
|
||||||
|
destination: true
|
||||||
- name: add
|
- name: add
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -36,6 +46,16 @@ instruction_forms:
|
|||||||
prefix: x
|
prefix: x
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "op1['value'] = op2['value'] + op3['value']; op1['name'] = op2['name']"
|
||||||
|
hidden_operands:
|
||||||
|
- class: flag
|
||||||
|
name: "Z"
|
||||||
|
source: false
|
||||||
|
destination: true
|
||||||
|
- class: flag
|
||||||
|
name: "N"
|
||||||
|
source: false
|
||||||
|
destination: true
|
||||||
- name: sub
|
- name: sub
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -50,6 +70,16 @@ instruction_forms:
|
|||||||
prefix: x
|
prefix: x
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "op1['value'] = op2['value'] - op3['value']; op1['name'] = op2['name']"
|
||||||
|
hidden_operands:
|
||||||
|
- class: flag
|
||||||
|
name: "Z"
|
||||||
|
source: false
|
||||||
|
destination: true
|
||||||
|
- class: flag
|
||||||
|
name: "N"
|
||||||
|
source: false
|
||||||
|
destination: true
|
||||||
- name: mul
|
- name: mul
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -64,6 +94,16 @@ instruction_forms:
|
|||||||
prefix: x
|
prefix: x
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "op1['value'] = op2['value'] * op3['value']; op1['name'] = op2['name']"
|
||||||
|
hidden_operands:
|
||||||
|
- class: flag
|
||||||
|
name: "Z"
|
||||||
|
source: false
|
||||||
|
destination: true
|
||||||
|
- class: flag
|
||||||
|
name: "N"
|
||||||
|
source: false
|
||||||
|
destination: true
|
||||||
- name: div
|
- name: div
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -78,6 +118,16 @@ instruction_forms:
|
|||||||
prefix: x
|
prefix: x
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "op1['value'] = op2['value'] / op3['value']; op1['name'] = op2['name']"
|
||||||
|
hidden_operands:
|
||||||
|
- class: flag
|
||||||
|
name: "Z"
|
||||||
|
source: false
|
||||||
|
destination: true
|
||||||
|
- class: flag
|
||||||
|
name: "N"
|
||||||
|
source: false
|
||||||
|
destination: true
|
||||||
- name: and
|
- name: and
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -92,6 +142,16 @@ instruction_forms:
|
|||||||
prefix: x
|
prefix: x
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "op1['value'] = op2['value'] & op3['value']; op1['name'] = op2['name']"
|
||||||
|
hidden_operands:
|
||||||
|
- class: flag
|
||||||
|
name: "Z"
|
||||||
|
source: false
|
||||||
|
destination: true
|
||||||
|
- class: flag
|
||||||
|
name: "N"
|
||||||
|
source: false
|
||||||
|
destination: true
|
||||||
- name: or
|
- name: or
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -106,6 +166,16 @@ instruction_forms:
|
|||||||
prefix: x
|
prefix: x
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "op1['value'] = op2['value'] | op3['value']; op1['name'] = op2['name']"
|
||||||
|
hidden_operands:
|
||||||
|
- class: flag
|
||||||
|
name: "Z"
|
||||||
|
source: false
|
||||||
|
destination: true
|
||||||
|
- class: flag
|
||||||
|
name: "N"
|
||||||
|
source: false
|
||||||
|
destination: true
|
||||||
- name: xor
|
- name: xor
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -120,6 +190,16 @@ instruction_forms:
|
|||||||
prefix: x
|
prefix: x
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "op1['value'] = op2['value'] ^ op3['value']; op1['name'] = op2['name']"
|
||||||
|
hidden_operands:
|
||||||
|
- class: flag
|
||||||
|
name: "Z"
|
||||||
|
source: false
|
||||||
|
destination: true
|
||||||
|
- class: flag
|
||||||
|
name: "N"
|
||||||
|
source: false
|
||||||
|
destination: true
|
||||||
- name: sll
|
- name: sll
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -134,6 +214,16 @@ instruction_forms:
|
|||||||
prefix: x
|
prefix: x
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "op1['value'] = op2['value'] << op3['value']; op1['name'] = op2['name']"
|
||||||
|
hidden_operands:
|
||||||
|
- class: flag
|
||||||
|
name: "Z"
|
||||||
|
source: false
|
||||||
|
destination: true
|
||||||
|
- class: flag
|
||||||
|
name: "N"
|
||||||
|
source: false
|
||||||
|
destination: true
|
||||||
- name: srl
|
- name: srl
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -148,6 +238,16 @@ instruction_forms:
|
|||||||
prefix: x
|
prefix: x
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "op1['value'] = op2['value'] >> op3['value']; op1['name'] = op2['name']"
|
||||||
|
hidden_operands:
|
||||||
|
- class: flag
|
||||||
|
name: "Z"
|
||||||
|
source: false
|
||||||
|
destination: true
|
||||||
|
- class: flag
|
||||||
|
name: "N"
|
||||||
|
source: false
|
||||||
|
destination: true
|
||||||
- name: sra
|
- name: sra
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -162,6 +262,16 @@ instruction_forms:
|
|||||||
prefix: x
|
prefix: x
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "op1['value'] = op2['value'] >> op3['value']; op1['name'] = op2['name']"
|
||||||
|
hidden_operands:
|
||||||
|
- class: flag
|
||||||
|
name: "Z"
|
||||||
|
source: false
|
||||||
|
destination: true
|
||||||
|
- class: flag
|
||||||
|
name: "N"
|
||||||
|
source: false
|
||||||
|
destination: true
|
||||||
- name: lw
|
- name: lw
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -177,6 +287,7 @@ instruction_forms:
|
|||||||
post_indexed: "*"
|
post_indexed: "*"
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "op1['value'] = memory[op2['value']]; op1['name'] = op2['name']"
|
||||||
- name: sw
|
- name: sw
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -192,6 +303,7 @@ instruction_forms:
|
|||||||
post_indexed: "*"
|
post_indexed: "*"
|
||||||
source: false
|
source: false
|
||||||
destination: true
|
destination: true
|
||||||
|
operation: "memory[op2['value']] = op1['value']"
|
||||||
- name: lb
|
- name: lb
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -207,6 +319,7 @@ instruction_forms:
|
|||||||
post_indexed: "*"
|
post_indexed: "*"
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "op1['value'] = memory[op2['value']]; op1['name'] = op2['name']"
|
||||||
- name: sb
|
- name: sb
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -222,6 +335,7 @@ instruction_forms:
|
|||||||
post_indexed: "*"
|
post_indexed: "*"
|
||||||
source: false
|
source: false
|
||||||
destination: true
|
destination: true
|
||||||
|
operation: "memory[op2['value']] = op1['value']"
|
||||||
- name: lh
|
- name: lh
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -237,6 +351,7 @@ instruction_forms:
|
|||||||
post_indexed: "*"
|
post_indexed: "*"
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "op1['value'] = memory[op2['value']]; op1['name'] = op2['name']"
|
||||||
- name: sh
|
- name: sh
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -252,6 +367,7 @@ instruction_forms:
|
|||||||
post_indexed: "*"
|
post_indexed: "*"
|
||||||
source: false
|
source: false
|
||||||
destination: true
|
destination: true
|
||||||
|
operation: "memory[op2['value']] = op1['value']"
|
||||||
- name: beq
|
- name: beq
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -265,6 +381,11 @@ instruction_forms:
|
|||||||
- class: identifier
|
- class: identifier
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
hidden_operands:
|
||||||
|
- class: flag
|
||||||
|
name: "Z"
|
||||||
|
source: true
|
||||||
|
destination: false
|
||||||
- name: bne
|
- name: bne
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -278,6 +399,11 @@ instruction_forms:
|
|||||||
- class: identifier
|
- class: identifier
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
hidden_operands:
|
||||||
|
- class: flag
|
||||||
|
name: "Z"
|
||||||
|
source: true
|
||||||
|
destination: false
|
||||||
- name: blt
|
- name: blt
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -291,6 +417,11 @@ instruction_forms:
|
|||||||
- class: identifier
|
- class: identifier
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
hidden_operands:
|
||||||
|
- class: flag
|
||||||
|
name: "N"
|
||||||
|
source: true
|
||||||
|
destination: false
|
||||||
- name: bge
|
- name: bge
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -304,6 +435,11 @@ instruction_forms:
|
|||||||
- class: identifier
|
- class: identifier
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
hidden_operands:
|
||||||
|
- class: flag
|
||||||
|
name: "N"
|
||||||
|
source: true
|
||||||
|
destination: false
|
||||||
- name: jal
|
- name: jal
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -313,6 +449,7 @@ instruction_forms:
|
|||||||
- class: identifier
|
- class: identifier
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "op1['value'] = pc + 4; pc = op2['value']"
|
||||||
- name: jalr
|
- name: jalr
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -327,6 +464,7 @@ instruction_forms:
|
|||||||
imd: 'int'
|
imd: 'int'
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "op1['value'] = pc + 4; pc = op2['value'] + op3['value']"
|
||||||
- name: lui
|
- name: lui
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -337,6 +475,7 @@ instruction_forms:
|
|||||||
imd: 'int'
|
imd: 'int'
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "op1['value'] = op2['value'] << 12"
|
||||||
- name: auipc
|
- name: auipc
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -347,6 +486,7 @@ instruction_forms:
|
|||||||
imd: 'int'
|
imd: 'int'
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "op1['value'] = pc + (op2['value'] << 12)"
|
||||||
- name: li
|
- name: li
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -357,6 +497,7 @@ instruction_forms:
|
|||||||
imd: 'int'
|
imd: 'int'
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "op1['value'] = op2['value']"
|
||||||
- name: mv
|
- name: mv
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -367,19 +508,28 @@ instruction_forms:
|
|||||||
prefix: x
|
prefix: x
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "op1['value'] = op2['value']"
|
||||||
- name: ret
|
- name: ret
|
||||||
operands: []
|
operands:
|
||||||
|
- class: register
|
||||||
|
prefix: x
|
||||||
|
name: "1" # x1 is the return address register (ra)
|
||||||
|
source: true
|
||||||
|
destination: false
|
||||||
|
operation: "pc = op1['value']"
|
||||||
- name: j
|
- name: j
|
||||||
operands:
|
operands:
|
||||||
- class: identifier
|
- class: identifier
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "pc = op1['value']"
|
||||||
- name: jr
|
- name: jr
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
prefix: x
|
prefix: x
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "pc = op1['value']"
|
||||||
# Floating-point instructions
|
# Floating-point instructions
|
||||||
- name: flw
|
- name: flw
|
||||||
operands:
|
operands:
|
||||||
@@ -396,6 +546,7 @@ instruction_forms:
|
|||||||
post_indexed: "*"
|
post_indexed: "*"
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "op1['value'] = memory[op2['value']]; op1['name'] = op2['name']"
|
||||||
- name: fsw
|
- name: fsw
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -411,6 +562,7 @@ instruction_forms:
|
|||||||
post_indexed: "*"
|
post_indexed: "*"
|
||||||
source: false
|
source: false
|
||||||
destination: true
|
destination: true
|
||||||
|
operation: "memory[op2['value']] = op1['value']"
|
||||||
- name: fadd
|
- name: fadd
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -425,6 +577,12 @@ instruction_forms:
|
|||||||
prefix: f
|
prefix: f
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "op1['value'] = op2['value'] + op3['value']; op1['name'] = op2['name']"
|
||||||
|
hidden_operands:
|
||||||
|
- class: flag
|
||||||
|
name: "FSR"
|
||||||
|
source: true
|
||||||
|
destination: true
|
||||||
- name: fsub
|
- name: fsub
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -439,6 +597,12 @@ instruction_forms:
|
|||||||
prefix: f
|
prefix: f
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "op1['value'] = op2['value'] - op3['value']; op1['name'] = op2['name']"
|
||||||
|
hidden_operands:
|
||||||
|
- class: flag
|
||||||
|
name: "FSR"
|
||||||
|
source: true
|
||||||
|
destination: true
|
||||||
- name: fmul
|
- name: fmul
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -453,6 +617,12 @@ instruction_forms:
|
|||||||
prefix: f
|
prefix: f
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "op1['value'] = op2['value'] * op3['value']; op1['name'] = op2['name']"
|
||||||
|
hidden_operands:
|
||||||
|
- class: flag
|
||||||
|
name: "FSR"
|
||||||
|
source: true
|
||||||
|
destination: true
|
||||||
- name: fdiv
|
- name: fdiv
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -467,6 +637,12 @@ instruction_forms:
|
|||||||
prefix: f
|
prefix: f
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "op1['value'] = op2['value'] / op3['value']; op1['name'] = op2['name']"
|
||||||
|
hidden_operands:
|
||||||
|
- class: flag
|
||||||
|
name: "FSR"
|
||||||
|
source: true
|
||||||
|
destination: true
|
||||||
- name: fmv.x.w
|
- name: fmv.x.w
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -477,6 +653,7 @@ instruction_forms:
|
|||||||
prefix: f
|
prefix: f
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "op1['value'] = op2['value']"
|
||||||
- name: fmv.w.x
|
- name: fmv.w.x
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -487,6 +664,7 @@ instruction_forms:
|
|||||||
prefix: x
|
prefix: x
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "op1['value'] = op2['value']"
|
||||||
# Vector instructions
|
# Vector instructions
|
||||||
- name: vsetvli
|
- name: vsetvli
|
||||||
operands:
|
operands:
|
||||||
@@ -510,6 +688,12 @@ instruction_forms:
|
|||||||
- class: identifier
|
- class: identifier
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "op1['value'] = min(op2['value'], op3['value']); vtype = op4['value']; vsew = op5['value']; vlmul = op6['value']"
|
||||||
|
hidden_operands:
|
||||||
|
- class: flag
|
||||||
|
name: "VSR"
|
||||||
|
source: true
|
||||||
|
destination: true
|
||||||
- name: vsetivli
|
- name: vsetivli
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -532,6 +716,12 @@ instruction_forms:
|
|||||||
- class: identifier
|
- class: identifier
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "op1['value'] = min(op2['value'], op3['value']); vtype = op4['value']; vsew = op5['value']; vlmul = op6['value']"
|
||||||
|
hidden_operands:
|
||||||
|
- class: flag
|
||||||
|
name: "VSR"
|
||||||
|
source: true
|
||||||
|
destination: true
|
||||||
- name: vle32.v
|
- name: vle32.v
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -547,6 +737,12 @@ instruction_forms:
|
|||||||
post_indexed: "*"
|
post_indexed: "*"
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "op1['value'] = memory[op2['value']]; op1['name'] = op2['name']"
|
||||||
|
hidden_operands:
|
||||||
|
- class: flag
|
||||||
|
name: "VSR"
|
||||||
|
source: true
|
||||||
|
destination: true
|
||||||
- name: vse32.v
|
- name: vse32.v
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -562,6 +758,12 @@ instruction_forms:
|
|||||||
post_indexed: "*"
|
post_indexed: "*"
|
||||||
source: false
|
source: false
|
||||||
destination: true
|
destination: true
|
||||||
|
operation: "memory[op2['value']] = op1['value']"
|
||||||
|
hidden_operands:
|
||||||
|
- class: flag
|
||||||
|
name: "VSR"
|
||||||
|
source: true
|
||||||
|
destination: true
|
||||||
- name: vadd.vv
|
- name: vadd.vv
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -576,6 +778,12 @@ instruction_forms:
|
|||||||
prefix: v
|
prefix: v
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "op1['value'] = op2['value'] + op3['value']; op1['name'] = op2['name']"
|
||||||
|
hidden_operands:
|
||||||
|
- class: flag
|
||||||
|
name: "VSR"
|
||||||
|
source: true
|
||||||
|
destination: true
|
||||||
- name: vfmv.v.f
|
- name: vfmv.v.f
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -586,6 +794,12 @@ instruction_forms:
|
|||||||
prefix: f
|
prefix: f
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "op1['value'] = op2['value']"
|
||||||
|
hidden_operands:
|
||||||
|
- class: flag
|
||||||
|
name: "VSR"
|
||||||
|
source: true
|
||||||
|
destination: true
|
||||||
- name: vfmadd.vv
|
- name: vfmadd.vv
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -600,6 +814,12 @@ instruction_forms:
|
|||||||
prefix: v
|
prefix: v
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "op1['value'] = op2['value'] * op3['value'] + op1['value']; op1['name'] = op2['name']"
|
||||||
|
hidden_operands:
|
||||||
|
- class: flag
|
||||||
|
name: "VSR"
|
||||||
|
source: true
|
||||||
|
destination: true
|
||||||
- name: vfmacc.vf
|
- name: vfmacc.vf
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -614,6 +834,12 @@ instruction_forms:
|
|||||||
prefix: v
|
prefix: v
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "op1['value'] = op2['value'] * op3['value'] + op1['value']"
|
||||||
|
hidden_operands:
|
||||||
|
- class: flag
|
||||||
|
name: "VSR"
|
||||||
|
source: true
|
||||||
|
destination: true
|
||||||
# CSR instructions
|
# CSR instructions
|
||||||
- name: csrr
|
- name: csrr
|
||||||
operands:
|
operands:
|
||||||
@@ -624,6 +850,12 @@ instruction_forms:
|
|||||||
- class: identifier
|
- class: identifier
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "op1['value'] = csr[op2['value']]"
|
||||||
|
hidden_operands:
|
||||||
|
- class: flag
|
||||||
|
name: "CSR"
|
||||||
|
source: true
|
||||||
|
destination: true
|
||||||
- name: csrw
|
- name: csrw
|
||||||
operands:
|
operands:
|
||||||
- class: identifier
|
- class: identifier
|
||||||
@@ -633,6 +865,12 @@ instruction_forms:
|
|||||||
prefix: x
|
prefix: x
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "csr[op1['value']] = op2['value']"
|
||||||
|
hidden_operands:
|
||||||
|
- class: flag
|
||||||
|
name: "CSR"
|
||||||
|
source: true
|
||||||
|
destination: true
|
||||||
- name: csrs
|
- name: csrs
|
||||||
operands:
|
operands:
|
||||||
- class: identifier
|
- class: identifier
|
||||||
@@ -642,6 +880,12 @@ instruction_forms:
|
|||||||
prefix: x
|
prefix: x
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "csr[op1['value']] |= op2['value']"
|
||||||
|
hidden_operands:
|
||||||
|
- class: flag
|
||||||
|
name: "CSR"
|
||||||
|
source: true
|
||||||
|
destination: true
|
||||||
- name: csrc
|
- name: csrc
|
||||||
operands:
|
operands:
|
||||||
- class: identifier
|
- class: identifier
|
||||||
@@ -651,6 +895,12 @@ instruction_forms:
|
|||||||
prefix: x
|
prefix: x
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "csr[op1['value']] &= ~op2['value']"
|
||||||
|
hidden_operands:
|
||||||
|
- class: flag
|
||||||
|
name: "CSR"
|
||||||
|
source: true
|
||||||
|
destination: true
|
||||||
# Atomic instructions
|
# Atomic instructions
|
||||||
- name: lr.w
|
- name: lr.w
|
||||||
operands:
|
operands:
|
||||||
@@ -667,6 +917,12 @@ instruction_forms:
|
|||||||
post_indexed: "*"
|
post_indexed: "*"
|
||||||
source: true
|
source: true
|
||||||
destination: false
|
destination: false
|
||||||
|
operation: "op1['value'] = memory[op2['value']]; memory[op2['value']] = reserved"
|
||||||
|
hidden_operands:
|
||||||
|
- class: flag
|
||||||
|
name: "CSR"
|
||||||
|
source: true
|
||||||
|
destination: true
|
||||||
- name: sc.w
|
- name: sc.w
|
||||||
operands:
|
operands:
|
||||||
- class: register
|
- class: register
|
||||||
@@ -685,4 +941,10 @@ instruction_forms:
|
|||||||
pre_indexed: "*"
|
pre_indexed: "*"
|
||||||
post_indexed: "*"
|
post_indexed: "*"
|
||||||
source: true
|
source: true
|
||||||
|
destination: true
|
||||||
|
operation: "if (memory[op3['value']] == reserved) { memory[op3['value']] = op2['value']; op1['value'] = 0; } else { op1['value'] = 1; }"
|
||||||
|
hidden_operands:
|
||||||
|
- class: flag
|
||||||
|
name: "CSR"
|
||||||
|
source: true
|
||||||
destination: true
|
destination: true
|
||||||
Reference in New Issue
Block a user