feat(riscv): add MOV pseudo-instruction and RVC compressed encoding
Assisted-by: DeepSeek V4 Pro
This commit is contained in:
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