diff options
| author | David Rubin <daviru007@icloud.com> | 2024-07-04 17:38:03 -0700 |
|---|---|---|
| committer | David Rubin <daviru007@icloud.com> | 2024-07-26 04:05:38 -0700 |
| commit | 9766b68c475438e24885dd75cf137d51e72ccfa3 (patch) | |
| tree | 85096570a8f57a68f209c741c5960d7bfb036786 /src/arch/riscv64/Encoding.zig | |
| parent | f2bf6c1b11702179329a4693cea429d550f519e1 (diff) | |
| download | zig-9766b68c475438e24885dd75cf137d51e72ccfa3.tar.gz zig-9766b68c475438e24885dd75cf137d51e72ccfa3.zip | |
riscv: un-cache the `avl` and `vtype` when returning from a function call
the csrs `avl` and `vtype` are considered caller-saved so it could have changed while inside of the function.
the easiest way to handle this is to just set the cached `vtype` and `avl` to null, so that the next time something
needs to set it, it'll emit an instruction instead of relying on a potentially invalid setting.
Diffstat (limited to 'src/arch/riscv64/Encoding.zig')
| -rw-r--r-- | src/arch/riscv64/Encoding.zig | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/arch/riscv64/Encoding.zig b/src/arch/riscv64/Encoding.zig index f4684fe42b..77cd905e7f 100644 --- a/src/arch/riscv64/Encoding.zig +++ b/src/arch/riscv64/Encoding.zig @@ -288,6 +288,9 @@ pub const Mnemonic = enum { vfaddvv, vfsubvv, + vmulvv, + vfmulvv, + vadcvv, vmvvx, @@ -546,9 +549,11 @@ pub const Mnemonic = enum { .vsetvli => .{ .opcode = .OP_V, .data = .{ .f = .{ .funct3 = 0b111 } } }, .vaddvv => .{ .opcode = .OP_V, .data = .{ .vecmath = .{ .vm = true, .funct6 = 0b000000, .funct3 = .OPIVV } } }, .vsubvv => .{ .opcode = .OP_V, .data = .{ .vecmath = .{ .vm = true, .funct6 = 0b000010, .funct3 = .OPIVV } } }, + .vmulvv => .{ .opcode = .OP_V, .data = .{ .vecmath = .{ .vm = true, .funct6 = 0b100101, .funct3 = .OPIVV } } }, .vfaddvv => .{ .opcode = .OP_V, .data = .{ .vecmath = .{ .vm = true, .funct6 = 0b000000, .funct3 = .OPFVV } } }, .vfsubvv => .{ .opcode = .OP_V, .data = .{ .vecmath = .{ .vm = true, .funct6 = 0b000010, .funct3 = .OPFVV } } }, + .vfmulvv => .{ .opcode = .OP_V, .data = .{ .vecmath = .{ .vm = true, .funct6 = 0b100100, .funct3 = .OPFVV } } }, .vadcvv => .{ .opcode = .OP_V, .data = .{ .vecmath = .{ .vm = true, .funct6 = 0b010000, .funct3 = .OPMVV } } }, .vmvvx => .{ .opcode = .OP_V, .data = .{ .vecmath = .{ .vm = true, .funct6 = 0b010111, .funct3 = .OPIVX } } }, @@ -710,8 +715,10 @@ pub const InstEnc = enum { .vaddvv, .vsubvv, + .vmulvv, .vfaddvv, .vfsubvv, + .vfmulvv, .vadcvv, .vmvvx, .vslidedownvx, |
