feat(riscv): add MOV pseudo-instruction and RVC compressed encoding
Assisted-by: DeepSeek V4 Pro
This commit is contained in:
Vendored
+5
-5
@@ -5,8 +5,8 @@
|
||||
|
||||
// func add(a, b int64) int64
|
||||
TEXT ·add(SB), NOSPLIT, $0-24
|
||||
LD a+0(FP), A0
|
||||
LD b+8(FP), A1
|
||||
ADD A0, A1, A0
|
||||
SD A0, ret+16(FP)
|
||||
RET
|
||||
MOV a+0(FP), X10
|
||||
MOV b+8(FP), X11
|
||||
ADD X11, X10, X10
|
||||
MOV X10, ret+16(FP)
|
||||
RET
|
||||
|
||||
Vendored
+10
-10
@@ -5,16 +5,16 @@
|
||||
|
||||
// func atomicAdd(ptr *int64, val int64) int64
|
||||
TEXT ·atomicAdd(SB), NOSPLIT, $0-24
|
||||
LD a+0(FP), A0
|
||||
LD b+8(FP), A1
|
||||
AMOADDD A1, (A0), A2
|
||||
SD A2, ret+16(FP)
|
||||
RET
|
||||
MOV a+0(FP), X10
|
||||
MOV b+8(FP), X11
|
||||
AMOADDD X11, (X10), X12
|
||||
MOV X12, ret+16(FP)
|
||||
RET
|
||||
|
||||
// func fpAdd(a, b float64) float64
|
||||
TEXT ·fpAdd(SB), NOSPLIT, $0-24
|
||||
FLD a+0(FP), FA0
|
||||
FLD b+8(FP), FA1
|
||||
FADDD FA0, FA1, FA2
|
||||
FSD FA2, ret+16(FP)
|
||||
RET
|
||||
FLD a+0(FP), F10
|
||||
FLD b+8(FP), F11
|
||||
FADDD F10, F11, F12
|
||||
FSD F12, ret+16(FP)
|
||||
RET
|
||||
|
||||
Vendored
+13
-14
@@ -4,24 +4,23 @@
|
||||
#include "textflag.h"
|
||||
|
||||
// func readCSR(csr int64) int64
|
||||
// Reads a CSR into the return value.
|
||||
TEXT ·readCSR(SB), NOSPLIT, $0-16
|
||||
LD a+0(FP), A0
|
||||
CSRRS $0x300, X0, A1
|
||||
SD A1, ret+8(FP)
|
||||
RET
|
||||
MOV a+0(FP), X10
|
||||
CSRRS $0x300, X0, X11
|
||||
MOV X11, ret+8(FP)
|
||||
RET
|
||||
|
||||
// func setCSRBit(csr, bit int64) int64
|
||||
TEXT ·setCSRBit(SB), NOSPLIT, $0-24
|
||||
LD a+0(FP), A0
|
||||
LD b+8(FP), A1
|
||||
CSRRS $0x304, A1, A2
|
||||
SD A2, ret+16(FP)
|
||||
RET
|
||||
MOV a+0(FP), X10
|
||||
MOV b+8(FP), X11
|
||||
CSRRS $0x304, X11, X12
|
||||
MOV X12, ret+16(FP)
|
||||
RET
|
||||
|
||||
// func writeCSR(val int64) int64
|
||||
TEXT ·writeCSR(SB), NOSPLIT, $0-16
|
||||
LD a+0(FP), A0
|
||||
CSRRW $0x305, A0, A1
|
||||
SD A1, ret+8(FP)
|
||||
RET
|
||||
MOV a+0(FP), X10
|
||||
CSRRW $0x305, X10, X11
|
||||
MOV X11, ret+8(FP)
|
||||
RET
|
||||
|
||||
Vendored
+12
-14
@@ -4,21 +4,19 @@
|
||||
#include "textflag.h"
|
||||
|
||||
// func fma(a, b, c float64) float64
|
||||
// Computes a*b + c using fused multiply-add.
|
||||
TEXT ·fma(SB), NOSPLIT, $0-32
|
||||
FLD a+0(FP), FA0
|
||||
FLD b+8(FP), FA1
|
||||
FLD c+16(FP), FA2
|
||||
FMADDD FA0, FA1, FA2, FA3
|
||||
FSD FA3, ret+24(FP)
|
||||
RET
|
||||
FLD a+0(FP), F10
|
||||
FLD b+8(FP), F11
|
||||
FLD c+16(FP), F12
|
||||
FMADDD F10, F11, F12, F13
|
||||
FSD F13, ret+24(FP)
|
||||
RET
|
||||
|
||||
// func fms(a, b, c float64) float64
|
||||
// Computes a*b - c using fused multiply-subtract.
|
||||
TEXT ·fms(SB), NOSPLIT, $0-32
|
||||
FLD a+0(FP), FA0
|
||||
FLD b+8(FP), FA1
|
||||
FLD c+16(FP), FA2
|
||||
FMSUBD FA0, FA1, FA2, FA3
|
||||
FSD FA3, ret+24(FP)
|
||||
RET
|
||||
FLD a+0(FP), F10
|
||||
FLD b+8(FP), F11
|
||||
FLD c+16(FP), F12
|
||||
FMSUBD F10, F11, F12, F13
|
||||
FSD F13, ret+24(FP)
|
||||
RET
|
||||
|
||||
Vendored
+21
-22
@@ -4,34 +4,33 @@
|
||||
#include "textflag.h"
|
||||
|
||||
// func casLoop(ptr *int64, old, new int64) bool
|
||||
// Compare-and-swap using LR/SC.
|
||||
TEXT ·casLoop(SB), NOSPLIT, $0-32
|
||||
cas_retry:
|
||||
LD a+0(FP), A0
|
||||
LRD (A0), A1
|
||||
LD b+8(FP), A2
|
||||
BNE A1, A2, cas_fail
|
||||
LD c+16(FP), A3
|
||||
SCD A3, (A0), A4
|
||||
BNE A4, X0, cas_retry
|
||||
ADDI X0, $1, A5
|
||||
SD A5, ret+24(FP)
|
||||
RET
|
||||
MOV a+0(FP), X10
|
||||
LRD (X10), X11
|
||||
MOV b+8(FP), X12
|
||||
BNE X11, X12, cas_fail
|
||||
MOV c+16(FP), X13
|
||||
SCD X13, (X10), X14
|
||||
BNE X14, X0, cas_retry
|
||||
ADDI X0, $1, X15
|
||||
MOV X15, ret+24(FP)
|
||||
RET
|
||||
cas_fail:
|
||||
SD X0, ret+24(FP)
|
||||
RET
|
||||
MOV X0, ret+24(FP)
|
||||
RET
|
||||
|
||||
// func intToFloat(x int64) float64
|
||||
TEXT ·intToFloat(SB), NOSPLIT, $0-16
|
||||
LD a+0(FP), A0
|
||||
FCVTDL A0, FA0
|
||||
FSD FA0, ret+8(FP)
|
||||
RET
|
||||
MOV a+0(FP), X10
|
||||
FCVTDL X10, F10
|
||||
FSD F10, ret+8(FP)
|
||||
RET
|
||||
|
||||
// func compare(a, b float64) bool
|
||||
TEXT ·compare(SB), NOSPLIT, $0-24
|
||||
FLD a+0(FP), FA0
|
||||
FLD b+8(FP), FA1
|
||||
FLTD FA0, FA1, A0
|
||||
SD A0, ret+16(FP)
|
||||
RET
|
||||
FLD a+0(FP), F10
|
||||
FLD b+8(FP), F11
|
||||
FLTD F10, F11, X10
|
||||
MOV X10, ret+16(FP)
|
||||
RET
|
||||
|
||||
Reference in New Issue
Block a user