RISCV.yml file has been updated.

This commit is contained in:
Metehan Dundar
2025-03-13 09:54:06 +01:00
parent a75098c9f5
commit 850f7edc6b

View File

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