test(asm): seed the riscv64 and loong64 assemble fuzz targets

Assisted-by: GLM 5.3
This commit is contained in:
petrbalvin committed 2026-10-07 13:51:02 +02:00
1 parent b9dfb48d79
commit 965b33e5b0
11 files changed
+1288

No files matched your search

+84
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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