test(asm): seed the riscv64 and loong64 assemble fuzz targets
Assisted-by: GLM 5.3
This commit is contained in:
1 parent
b9dfb48d79
commit
965b33e5b0
11 files changed
+1288
No files matched your search
+84
@@ -0,0 +1,84 @@
|
||||
// Copyright (c) 2026 Petr Balvín <opensource@petrbalvin.org> (https://petrbalvin.org)
|
||||
// SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
// Seed corpus for FuzzAssembleLOONG64: the ll/sc and pointer load/store
|
||||
// offset ladder, the three spans the encoder classifies by (a signed 16-bit
|
||||
// offset alone, a 32-bit one split through addu16i.d into R30, a wider one
|
||||
// materialised in full), the acquire/release pair, sc.q and the atomics with
|
||||
// their dbar forms.
|
||||
|
||||
#include "textflag.h"
|
||||
|
||||
TEXT ·llscNear(SB), NOSPLIT, $0
|
||||
LL (R12), R13
|
||||
LL 0(R12), R13
|
||||
LL 4(R12), R13
|
||||
LLW 8(R12), R13
|
||||
LLW -4(R12), R13
|
||||
LLV 8(R14), R15
|
||||
LLV -8(R14), R15
|
||||
SC R16, (R17)
|
||||
SC R16, 0(R17)
|
||||
SCW R16, 4(R17)
|
||||
SCV R18,-8(R19)
|
||||
RET
|
||||
|
||||
TEXT ·llscSpans(SB), NOSPLIT, $0
|
||||
LL 1020(R12), R13
|
||||
LL 1024(R12), R13
|
||||
LL -1024(R12), R13
|
||||
LLW 32760(R12), R13
|
||||
LLW 32764(R12), R13
|
||||
LLW 32768(R12), R13
|
||||
LLW -32768(R12), R13
|
||||
LLV 65532(R14), R15
|
||||
LLV 65536(R14), R15
|
||||
LLV 131068(R14), R15
|
||||
LLW 1048572(R12), R13
|
||||
LLV 2147483644(R14), R15
|
||||
LLV -2147483648(R14), R15
|
||||
SC R16, 1020(R17)
|
||||
SCW R16, 32764(R17)
|
||||
SCV R18, 65532(R19)
|
||||
SCV R18, 65536(R19)
|
||||
RET
|
||||
|
||||
TEXT ·ptrForms(SB), NOSPLIT, $0
|
||||
MOVWP R16, (R17)
|
||||
MOVWP R16, 8(R17)
|
||||
MOVVP R18, (R19)
|
||||
MOVVP R18,-8(R19)
|
||||
RET
|
||||
|
||||
TEXT ·acqRel(SB), NOSPLIT, $0
|
||||
LLACQW (R5), R4
|
||||
LLACQV (R5), R4
|
||||
SCRELW R4, (R6)
|
||||
SCRELV R4, (R6)
|
||||
SCQ R4, R5, (R6)
|
||||
RET
|
||||
|
||||
TEXT ·atomics(SB), NOSPLIT, $0
|
||||
AMSWAPB R14, (R13), R12
|
||||
AMSWAPH R14, (R13), R12
|
||||
AMSWAPW R14, (R13), R12
|
||||
AMSWAPV R14, (R13), R12
|
||||
AMCASB R14, (R13), R12
|
||||
AMCASDBV R14, (R13), R12
|
||||
AMADDW R14, (R13), R12
|
||||
AMADDV R14, (R13), R12
|
||||
AMANDW R6, (R5), R4
|
||||
AMORW R0, (R5), R4
|
||||
AMXORV R14, (R13), R12
|
||||
AMMAXW R14, (R13), R12
|
||||
AMMINV R14, (R13), R12
|
||||
AMMAXWU R14, (R13), R12
|
||||
AMMINVU R14, (R13), R12
|
||||
AMADDDBW R14, (R13), R12
|
||||
AMADDDBV R14, (R13), R12
|
||||
AMANDDBW R6, (R5), R4
|
||||
AMORDBV R14, (R13), R12
|
||||
AMXORDBW R14, (R13), R12
|
||||
AMMAXDBWU R14, (R13), R12
|
||||
AMMINDBVU R14, (R13), R12
|
||||
RET
|
||||
+212
@@ -0,0 +1,212 @@
|
||||
// Copyright (c) 2026 Petr Balvín <opensource@petrbalvin.org> (https://petrbalvin.org)
|
||||
// SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
// Seed corpus for FuzzAssembleLOONG64: the LSX (V) and LASX (X) register
|
||||
// banks, the family GOROOT's loong64 assembler corpus exercises
|
||||
// (cmd/asm/internal/asm/testdata/loong64enc*.s). Every immediate window sits
|
||||
// on an encoder gate: the si5 compares, the biased shifts, the ui8 logic
|
||||
// immediates and the element moves.
|
||||
|
||||
#include "textflag.h"
|
||||
|
||||
TEXT ·vecArith(SB), NOSPLIT, $0
|
||||
VADDV V1, V2, V3
|
||||
VADDW V1, V2, V3
|
||||
VADDD V1, V2, V3
|
||||
VADDQ V1, V2, V3
|
||||
VSUBV V1, V2, V3
|
||||
VSSUBV V1, V2, V3
|
||||
VSADDVU V1, V2, V3
|
||||
VMULV V1, V2, V3
|
||||
VMUHVU V1, V2, V3
|
||||
VDIVB V1, V2, V3
|
||||
VMODH V1, V2, V3
|
||||
VANDV V1, V2, V3
|
||||
VORV V1, V2, V3
|
||||
VXORV V1, V2, V3
|
||||
VNORV V1, V2, V3
|
||||
VANDNV V1, V2, V3
|
||||
VSEQB V1, V2, V3
|
||||
VSLTW V1, V2, V3
|
||||
VSLTBU V1, V2, V3
|
||||
VSLLB V1, V2, V3
|
||||
VSRAH V1, V2, V3
|
||||
VROTRV V1, V2, V3
|
||||
VILVLW V1, V2, V3
|
||||
VILVHV V1, V2, V3
|
||||
VBITCLRW V1, V2, V3
|
||||
VBITSETB V1, V2, V3
|
||||
VBITREVW V1, V2, V3
|
||||
VADDWEVHB V1, V2, V3
|
||||
VSUBWODVW V1, V2, V3
|
||||
VMULWEVQV V1, V2, V3
|
||||
VMADDWODQVU V1, V2, V3
|
||||
VSHUFV V1, V2, V3
|
||||
RET
|
||||
|
||||
TEXT ·vecArithX(SB), NOSPLIT, $0
|
||||
XVADDV X1, X2, X3
|
||||
XVADDW X1, X2, X3
|
||||
XVADDD X1, X2, X3
|
||||
XVADDQ X1, X2, X3
|
||||
XVSUBV X1, X2, X3
|
||||
XVSSUBVU X1, X2, X3
|
||||
XVMULV X1, X2, X3
|
||||
XVMUHVU X1, X2, X3
|
||||
XVDIVB X1, X2, X3
|
||||
XVANDV X1, X2, X3
|
||||
XVNORV X1, X2, X3
|
||||
XVSEQB X1, X2, X3
|
||||
XVSLTW X1, X2, X3
|
||||
XVSLLB X1, X2, X3
|
||||
XVSRAB X1, X2, X3
|
||||
XVROTRW X1, X2, X3
|
||||
XVILVLB X1, X2, X3
|
||||
XVBITCLRV X1, X2, X3
|
||||
XVADDWEVHB X1, X2, X3
|
||||
XVMULWODWHU X1, X2, X3
|
||||
XVMADDWEVQVUV X1, X2, X3
|
||||
XVSHUFV X1, X2, X3
|
||||
RET
|
||||
|
||||
TEXT ·vecImm(SB), NOSPLIT, $0
|
||||
VANDB $0, V2, V3
|
||||
VANDB $255, V2, V3
|
||||
VORB $128, V2, V3
|
||||
VXORB $255, V2, V3
|
||||
VNORB $1, V2, V3
|
||||
VSEQB $-16, V2, V3
|
||||
VSEQB $15, V2, V3
|
||||
VSEQH $0, V2, V3
|
||||
VSEQW $-1, V2, V3
|
||||
VSEQV $15, V2, V3
|
||||
VSEQV $-15, V2, V3
|
||||
VSLTB $-16, V2, V3
|
||||
VSLTBU $0, V2, V3
|
||||
VSLTBU $31, V2, V3
|
||||
VADDBU $0, V2, V3
|
||||
VADDVU $31, V2, V3
|
||||
VSUBBU $31, V2, V3
|
||||
VSLLB $0, V2, V3
|
||||
VSLLB $7, V2, V3
|
||||
VSLLH $15, V2, V3
|
||||
VSLLW $31, V2, V3
|
||||
VSLLV $63, V2, V3
|
||||
VSRLB $7, V2, V3
|
||||
VSRAB $7, V2, V3
|
||||
VSRAH $15, V2, V3
|
||||
VSRAW $31, V2, V3
|
||||
VSRAV $63, V2, V3
|
||||
VROTRB $7, V2, V3
|
||||
VROTRH $15, V2, V3
|
||||
VROTRW $31, V2, V3
|
||||
VROTRV $63, V2, V3
|
||||
VBITCLRB $7, V2, V3
|
||||
VBITSETH $15, V2, V3
|
||||
VBITREVW $31, V2, V3
|
||||
VBITREVV $63, V2, V3
|
||||
XVANDB $0, X2, X3
|
||||
XVANDB $255, X2, X3
|
||||
XVSEQB $-16, X2, X3
|
||||
XVSEQB $15, X2, X3
|
||||
XVSEQV $15, X2, X3
|
||||
XVADDVU $31, X2, X3
|
||||
XVSLLB $0, X2, X3
|
||||
XVSLLB $7, X2, X3
|
||||
XVSLLV $63, X2, X3
|
||||
XVSRAB $7, X2, X3
|
||||
XVROTRV $63, X2, X3
|
||||
XVBITCLRB $7, X2, X3
|
||||
XVBITSETV $63, X2, X3
|
||||
RET
|
||||
|
||||
TEXT ·vecUnary(SB), NOSPLIT, $0
|
||||
VPCNTB V1, V2
|
||||
VPCNTH V1, V2
|
||||
VPCNTW V1, V2
|
||||
VPCNTV V1, V2
|
||||
VNEGB V1, V2
|
||||
VNEGW V1, V2
|
||||
VNEGV V1, V2
|
||||
VFCLASSF V1, V2
|
||||
VFCLASSD V1, V2
|
||||
VFSQRTF V1, V2
|
||||
VFSQRTD V1, V2
|
||||
VFRECIPD V1, V2
|
||||
VFRSQRTF V1, V2
|
||||
VFRINTF V1, V2
|
||||
VFRINTRMD V1, V2
|
||||
VFRINTRNEF V1, V2
|
||||
VFRINTRZD V1, V2
|
||||
VFRINTRPF V1, V2
|
||||
XVPCNTB X1, X2
|
||||
XVPCNTV X1, X2
|
||||
XVNEGH X1, X2
|
||||
XVFSQRTD X1, X2
|
||||
XVFRECIPF X1, X2
|
||||
XVFRINTRZD X1, X2
|
||||
RET
|
||||
|
||||
TEXT ·vecCond(SB), NOSPLIT, $0
|
||||
VSETNEV V1, FCC0
|
||||
VSETEQV V1, FCC1
|
||||
VSETANYEQB V1, FCC2
|
||||
VSETANYEQH V2, FCC3
|
||||
VSETANYEQW V1, FCC4
|
||||
VSETANYEQV V2, FCC5
|
||||
VSETALLNEB V1, FCC6
|
||||
VSETALLNEH V2, FCC7
|
||||
VSETALLNEW V1, FCC0
|
||||
VSETALLNEV V0, FCC1
|
||||
XVSETNEV X1, FCC0
|
||||
XVSETEQV X2, FCC1
|
||||
XVSETANYEQV X1, FCC2
|
||||
XVSETALLNEB X2, FCC3
|
||||
RET
|
||||
|
||||
TEXT ·vecShuffle4(SB), NOSPLIT, $0
|
||||
VSHUFB V0, V1, V2, V3
|
||||
XVSHUFB X0, X1, X2, X3
|
||||
RET
|
||||
|
||||
// The VMOVQ/XVMOVQ move family: the load, the indexed load, the store, the
|
||||
// replicated load, the whole-register move, the GPR broadcast, the element
|
||||
// extract, the element insert and the element broadcast.
|
||||
TEXT ·vecMove(SB), NOSPLIT, $0
|
||||
VMOVQ 8(R4), V2
|
||||
VMOVQ (R4)(R5), V2
|
||||
VMOVQ V2, 8(R4)
|
||||
VMOVQ V2, (R4)(R5)
|
||||
VMOVQ 2(R4), V1.H8
|
||||
VMOVQ -6(R4), V1.H8
|
||||
VMOVQ -12(R4), V2.W4
|
||||
VMOVQ V1, V2
|
||||
VMOVQ R4, V1.B16
|
||||
VMOVQ R4, V1.H8
|
||||
VMOVQ R4, V1.W4
|
||||
VMOVQ R4, V1.V2
|
||||
VMOVQ V1.B[3], R5
|
||||
VMOVQ V1.H[7], R5
|
||||
VMOVQ V1.W[3], R5
|
||||
VMOVQ V1.V[1], R5
|
||||
VMOVQ R5, V1.B[3]
|
||||
VMOVQ R5, V1.H[7]
|
||||
VMOVQ R5, V1.W[3]
|
||||
VMOVQ R5, V1.V[1]
|
||||
VMOVQ V1.B[3], V9.B16
|
||||
VMOVQ V2.H[2], V8.H8
|
||||
VMOVQ V3.W[1], V7.W4
|
||||
VMOVQ V4.V[0], V6.V2
|
||||
XVMOVQ X1, X2
|
||||
XVMOVQ X0, X31.B32
|
||||
XVMOVQ X1, X30.H16
|
||||
XVMOVQ X2, X29.W8
|
||||
XVMOVQ X3, X28.V4
|
||||
XVMOVQ X3, X27.Q2
|
||||
XVMOVQ X0, X31.W[7]
|
||||
XVMOVQ X1, X29.W[0]
|
||||
XVMOVQ X3, X28.V[3]
|
||||
XVMOVQ X4, X27.V[0]
|
||||
XVMOVQ X31.W[7], X0
|
||||
XVMOVQ X28.V[3], X8
|
||||
RET
|
||||
+121
@@ -0,0 +1,121 @@
|
||||
// Copyright (c) 2026 Petr Balvín <opensource@petrbalvin.org> (https://petrbalvin.org)
|
||||
// SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
// Seed corpus for FuzzAssembleLOONG64: the branches over their offset range,
|
||||
// the jumps, the bit-field pair at the msb/lsb boundaries, the ALSL shift
|
||||
// window, RDTIME, the system instructions, the constant materialisation
|
||||
// chain and the register-class moves.
|
||||
|
||||
#include "textflag.h"
|
||||
|
||||
TEXT ·branches(SB), NOSPLIT, $0
|
||||
BEQ R4, R5, b1
|
||||
BNE R4, R5, b2
|
||||
BLT R4, R5, b1
|
||||
BGE R4, R5, b2
|
||||
BLTU R4, R5, b1
|
||||
BGEU R4, R5, b2
|
||||
BEQZ R6, b1
|
||||
BNEZ R7, b2
|
||||
BLTZ R8, b1
|
||||
BGEZ R9, b2
|
||||
BLEZ R10, b1
|
||||
BGTZ R11, b2
|
||||
BFPT b1
|
||||
BFPF b2
|
||||
|
||||
b1:
|
||||
MOVV R1, R2
|
||||
|
||||
b2:
|
||||
MOVV R2, R1
|
||||
BEQ R4, R5, b1
|
||||
RET
|
||||
|
||||
TEXT ·jumps(SB), NOSPLIT, $0
|
||||
JMP j1
|
||||
JAL (R30)
|
||||
JIRL R0, R4, 8
|
||||
JIRL R1, R5, 0
|
||||
CALL runtime·morestack_noctxt(SB)
|
||||
|
||||
j1:
|
||||
JMP -3(PC)
|
||||
RET
|
||||
|
||||
TEXT ·bitfield(SB), NOSPLIT, $0
|
||||
BSTRINSW $3, R4, $0, R5
|
||||
BSTRINSV $7, R4, $0, R5
|
||||
BSTRINSV $31, R6, $0, R7
|
||||
BSTRINSV $63, R6, $32, R7
|
||||
BSTRPICKW $3, R4, $0, R5
|
||||
BSTRPICKV $6, R7, $0, R8
|
||||
BSTRPICKV $63, R6, $32, R7
|
||||
ALSLW $1, R4, R5, R6
|
||||
ALSLW $4, R7, R8, R9
|
||||
ALSLWU $3, R4, R5, R6
|
||||
ALSLV $2, R8, R9, R10
|
||||
ALSLV $3, R8, R9, R10
|
||||
RET
|
||||
|
||||
TEXT ·system(SB), NOSPLIT, $0
|
||||
SYSCALL
|
||||
DBAR
|
||||
DBAR $0
|
||||
BREAK $0
|
||||
BREAK $32767
|
||||
PRELD 0(R4), $0
|
||||
PRELD 2047(R4), $31
|
||||
RDTIMELW R7, R8
|
||||
RDTIMEHW R7, R8
|
||||
RDTIMED R20, R21
|
||||
RET
|
||||
|
||||
TEXT ·consts(SB), NOSPLIT, $0
|
||||
LU12IW R4, $0x12345
|
||||
LU12IW R5, $-524288
|
||||
LU12IW R6, $1048575
|
||||
LU32ID R7, $-524288
|
||||
LU52ID $-4096, R8, R9
|
||||
LU52ID $4095, R8, R9
|
||||
PCALAU12I R10, $0x12345
|
||||
PCADDU12I R11, $-524288
|
||||
ADDV16 $65536, R11, R12
|
||||
ADDV16 $-65536, R11, R12
|
||||
MOVV $0x123456789ABCDEF0, R13
|
||||
MOVV $-1, R14
|
||||
RET
|
||||
|
||||
TEXT ·regClasses(SB), NOSPLIT, $0
|
||||
MOVV R4, F5
|
||||
MOVV F6, R7
|
||||
MOVW R8, F9
|
||||
MOVW F10, R11
|
||||
MOVV R12, FCC0
|
||||
MOVV FCC1, R13
|
||||
MOVV R14, FCSR0
|
||||
MOVV FCSR3, R15
|
||||
FSEL FCC0, F3, F4, F3
|
||||
FSEL FCC1, F1, F2
|
||||
RET
|
||||
|
||||
TEXT ·memOffsets(SB), NOSPLIT, $0
|
||||
MOVB 2047(R4), R5
|
||||
MOVB -2048(R4), R5
|
||||
MOVH 2047(R4), R5
|
||||
MOVW 2047(R4), R5
|
||||
MOVV 2047(R4), R5
|
||||
MOVW 2048(R4), R5
|
||||
MOVW -2048(R4), R5
|
||||
MOVW 4095(R4), R5
|
||||
MOVW -4096(R4), R5
|
||||
MOVW 65536(R4), R5
|
||||
MOVW $4(R4), R5
|
||||
MOVV $4(R4), R5
|
||||
MOVBU -1(R4), R5
|
||||
MOVHU 2(R4), R5
|
||||
MOVWU -3(R4), R5
|
||||
MOVF 8(R4), F5
|
||||
MOVD -8(R4), F5
|
||||
MOVV (R4)(R5), R6
|
||||
RET
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
// Copyright (c) 2026 Petr Balvín <opensource@petrbalvin.org> (https://petrbalvin.org)
|
||||
// SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
// Seed corpus for FuzzAssembleLOONG64: the shuffle/permute immediate family.
|
||||
// VSHUF4I.B/H/W take a ui8 packing two position nibbles; VSHUF4I.V is
|
||||
// range-gated to 0..15 although its field is ui8, the same gate the
|
||||
// toolchain keeps. VPERMI.W and the VEXTRINS pack an element index and an
|
||||
// insert/extract order in one ui8.
|
||||
|
||||
#include "textflag.h"
|
||||
|
||||
TEXT ·shuf4(SB), NOSPLIT, $0
|
||||
VSHUF4IB $0, V2, V1
|
||||
VSHUF4IB $16, V2, V1
|
||||
VSHUF4IB $255, V2, V1
|
||||
VSHUF4IH $0, V2, V1
|
||||
VSHUF4IH $128, V2, V1
|
||||
VSHUF4IH $255, V2, V1
|
||||
VSHUF4IW $0, V2, V1
|
||||
VSHUF4IW $96, V2, V1
|
||||
VSHUF4IW $255, V2, V1
|
||||
VSHUF4IV $0, V2, V1
|
||||
VSHUF4IV $8, V2, V1
|
||||
VSHUF4IV $15, V2, V1
|
||||
RET
|
||||
|
||||
TEXT ·shuf4X(SB), NOSPLIT, $0
|
||||
XVSHUF4IB $0, X2, X1
|
||||
XVSHUF4IB $255, X2, X1
|
||||
XVSHUF4IH $255, X2, X1
|
||||
XVSHUF4IW $255, X2, X1
|
||||
XVSHUF4IV $0, X2, X1
|
||||
XVSHUF4IV $15, X2, X1
|
||||
RET
|
||||
|
||||
TEXT ·permi(SB), NOSPLIT, $0
|
||||
VPERMIW $0, V2, V1
|
||||
VPERMIW $255, V2, V1
|
||||
XVPERMIW $0, X2, X1
|
||||
XVPERMIW $255, X2, X1
|
||||
XVPERMIV $0, X2, X1
|
||||
XVPERMIV $255, X2, X1
|
||||
XVPERMIQ $0, X2, X1
|
||||
XVPERMIQ $255, X2, X1
|
||||
RET
|
||||
|
||||
TEXT ·extrins(SB), NOSPLIT, $0
|
||||
VEXTRINSB $0, V2, V1
|
||||
VEXTRINSB $255, V2, V1
|
||||
VEXTRINSH $0, V2, V1
|
||||
VEXTRINSH $255, V2, V1
|
||||
VEXTRINSW $0, V2, V1
|
||||
VEXTRINSW $255, V2, V1
|
||||
VEXTRINSV $0, V2, V1
|
||||
VEXTRINSV $255, V2, V1
|
||||
XVEXTRINSB $0, X2, X1
|
||||
XVEXTRINSB $255, X2, X1
|
||||
XVEXTRINSH $255, X2, X1
|
||||
XVEXTRINSW $255, X2, X1
|
||||
XVEXTRINSV $255, X2, X1
|
||||
RET
|
||||
Reference in new issue
Block a user