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

+35
View File
@@ -0,0 +1,35 @@
// Copyright (c) 2026 Petr Balvín <opensource@petrbalvin.org> (https://petrbalvin.org)
// SPDX-License-Identifier: BSD-3-Clause
// Seed corpus for FuzzAssembleRISCV64: the CSR instructions over the whole
// 12-bit address range and the 5-bit immediate window of the CSRRWI family.
#include "textflag.h"
TEXT ·csrRegs(SB), NOSPLIT, $0
CSRRW $0x300, X5, X6
CSRRS $0x304, X7, X8
CSRRC $0x305, X9, X10
CSRRW $0, X5, X6
CSRRS $0xFFF, X7, X8
CSRRC $0x7FF, X9, X10
CSRRW $0x341, X0, X6
CSRRS $0x342, X0, X6
RET
TEXT ·csrImm(SB), NOSPLIT, $0
CSRRWI $0x300, $0, X6
CSRRSI $0x304, $31, X8
CSRRCI $0x305, $1, X10
CSRRWI $0xFFF, $15, X6
CSRRSI $0, $31, X8
CSRRCI $0x7FF, $16, X10
RET
TEXT ·csrNamed(SB), NOSPLIT, $0
CSRRS $0xC00, X0, X14
CSRRS $0xC01, X0, X15
CSRRS $0xC02, X0, X16
CSRRW $0x105, X5, X6
CSRRSI $0x106, $1, X7
RET
+106
View File
@@ -0,0 +1,106 @@
// Copyright (c) 2026 Petr Balvín <opensource@petrbalvin.org> (https://petrbalvin.org)
// SPDX-License-Identifier: BSD-3-Clause
// Seed corpus for FuzzAssembleRISCV64: the immediate-range ladder of the
// I-type arithmetic and the U-type pair, the family GOROOT's riscv64
// assembler corpus walks (cmd/asm/internal/asm/testdata/riscv64.s). Every
// boundary sits on an encoder gate: the 12-bit signed window, the
// one-instruction and two-instruction decompositions, the shamt widths and
// the wide MOV immediate that goes through the literal pool.
#include "textflag.h"
TEXT ·immIType(SB), NOSPLIT, $0
ADDI $2047, X5, X6
ADDI $-2048, X5, X6
ADDI $2048, X5, X6
ADDI $-2049, X5, X6
ADDI $4094, X5, X6
ADDI $-4096, X5, X6
ADDI $4095, X5, X6
ADDI $-4097, X5, X6
ADDI $0, X5, X6
SLTI $2047, X5, X7
SLTI $-2048, X5, X7
SLTIU $2047, X5, X7
SLTIU $-2048, X5, X7
ANDI $-2048, X5, X6
ANDI $2047, X5, X6
ORI $-1, X5, X6
XORI $2047, X5, X6
XORI $-2048, X5, X6
RET
TEXT ·immAlias(SB), NOSPLIT, $0
ADD $2047, X5, X6
ADD $2048, X5, X6
SUB $1, X5, X6
SUB $2049, X5, X6
AND $-1, X5, X6
OR $2047, X5, X6
XOR $-2048, X5, X6
SLT $55, X5, X7
SLTU $55, X5, X7
ADDW $2047, X5, X6
RET
TEXT ·immUType(SB), NOSPLIT, $0
LUI $0x7FFFF, X6
LUI $-0x80000, X6
LUI $1, X6
AUIPC $0x7FFFF, X7
AUIPC $-0x80000, X7
RET
TEXT ·immShift(SB), NOSPLIT, $0
SLLI $0, X5, X6
SLLI $31, X5, X6
SLLI $63, X5, X6
SRLI $31, X5, X6
SRLI $63, X5, X6
SRAI $1, X5, X6
SRAI $63, X5, X6
SLLIW $31, X5, X6
SRLIW $31, X5, X6
SRAIW $31, X5, X6
SLLIUW $31, X5, X6
RET
TEXT ·immWide(SB), NOSPLIT, $0
MOV $0, X10
MOV $2047, X10
MOV $2048, X10
MOV $-2048, X10
MOV $4095, X10
MOV $-4097, X10
MOV $0x12345678, X10
MOV $0x123456789, X10
MOV $0x123456789ABCDEF0, X10
MOV $-1, X11
MOV $-0x8000000000000000, X11
MOV $0x7FFFFFFFFFFFFFFF, X12
RET
TEXT ·memOffsets(SB), NOSPLIT, $0
LD 0(X10), X11
LD 2047(X10), X11
LD -2048(X10), X11
LD 2048(X10), X11
LD 4095(X10), X11
LD -4096(X10), X11
LW 0(X10), X12
LBU -1(X10), X12
LHU 2(X10), X12
LWU -3(X10), X12
SD X11, 0(X10)
SD X11, 2047(X10)
SD X11,-2048(X10)
SD X11, 4095(X10)
SW X12,-4096(X10)
SH X12, 6(X10)
SB X12, 7(X10)
FLW 8(X10), F8
FLD -8(X10), F8
FSW F8, 16(X10)
FSD F8,-16(X10)
RET
+95
View File
@@ -0,0 +1,95 @@
// Copyright (c) 2026 Petr Balvín <opensource@petrbalvin.org> (https://petrbalvin.org)
// SPDX-License-Identifier: BSD-3-Clause
// Seed corpus for FuzzAssembleRISCV64: the RVC-compressible shapes. Every
// instruction here has a compressed 16-bit encoding the compression pass may
// pick: the two-operand ALU forms over x8-x15, the stack-pointer loads and
// stores at the scaled offset boundaries, C.ADDI16SP and C.ADDI4SPN ranges,
// the compressed branches and the uncompressible spellings beside them.
#include "textflag.h"
TEXT ·primeALU(SB), NOSPLIT, $0
ADD X9, X8, X8
ADD X15, X8, X8
ADDI $1, X8, X8
ADDI $31, X15, X15
ADDI $-32, X8, X8
AND X9, X8, X8
ANDI $3, X8, X8
OR X10, X9, X9
XOR X11, X10, X10
SUB X13, X12, X12
SLLI $2, X8, X8
SRLI $5, X9, X9
SRAI $7, X10, X10
MOV X9, X8
MOV X1, X8
MOV X8, X1
RET
TEXT ·stackOffsets(SB), NOSPLIT, $0
LW 0(X2), X8
LW 4(X2), X8
LW 124(X2), X9
LW 2044(X2), X10
LD 0(X2), X8
LD 8(X2), X8
LD 504(X2), X9
SW X8, 0(X2)
SW X8, 124(X2)
SW X8, 2044(X2)
SD X8, 0(X2)
SD X8, 504(X2)
FLW 0(X2), F8
FLD 504(X2), F8
FSW F8, 0(X2)
FSD F8, 504(X2)
RET
TEXT ·frameAdj(SB), NOSPLIT, $0
ADDI $16, X2, X2
ADDI $-16, X2, X2
ADDI $496, X2, X2
ADDI $-512, X2, X2
ADDI $1024, X2, X2
ADDI $2048, X2, X2
ADDI $1, X2, X2
RET
TEXT ·primeMem(SB), NOSPLIT, $0
LW 0(X8), X9
LW 4(X8), X10
LW 124(X8), X11
LD 0(X8), X9
LD 8(X8), X10
LD 120(X8), X11
SW X9, 0(X8)
SW X9, 124(X8)
SD X9, 0(X8)
SD X9, 120(X8)
RET
TEXT ·cBranches(SB), NOSPLIT, $0
BEQ X8, X0, cb1
BNE X9, X0, cb2
BLT X10, X0, cb1
BGE X11, X0, cb2
BLTU X12, X0, cb1
BGEU X13, X0, cb2
cb1:
MOV X8, X9
cb2:
MOV X9, X8
RET
TEXT ·uncompressible(SB), NOSPLIT, $0
ADD X17, X16, X16
ADDI $2048, X8, X8
LW 2048(X2), X10
LD 512(X2), X10
SW X8, 2048(X2)
ADDI $2049, X2, X2
RET
+233
View File
@@ -0,0 +1,233 @@
// Copyright (c) 2026 Petr Balvín <opensource@petrbalvin.org> (https://petrbalvin.org)
// SPDX-License-Identifier: BSD-3-Clause
// Seed corpus for FuzzAssembleRISCV64: the RVV surface. The configuration
// setters, the load/store families with their segment and fault-only-first
// variants, the arithmetic operand classes (VV/VX/VI, the masks, the
// merge and carry forms, the reductions and the whole-register moves).
#include "textflag.h"
TEXT ·config(SB), NOSPLIT, $0
VSETVLI X5, E8, M8, TA, MA, X6
VSETVLI X5, E8, M1, TU, MU, X6
VSETVLI $15, E32, M1, TA, MA, X12
VSETVLI $31, E64, M2, TU, MU, X12
VSETIVLI $0, E16, M4, TA, MA, X0
VSETIVLI $4, E32, M1, TA, MA, X0
VSETIVLI $31, E8, M8, TU, MU, X15
RET
TEXT ·loads(SB), NOSPLIT, $0
VLE8V (X10), V8
VLE16V (X10), V8
VLE32V (X10), V8
VLE64V (X11), V16
VSE8V V8, (X10)
VSE16V V8, (X10)
VSE32V V15, (X11)
VSE64V V24, (X10)
VLSE8V (X14), X9, V0
VLSE32V (X14), X5, V4
VSSE64V V4, X7, (X14)
VLUXEI8V (X10), V20, V4
VLOXEI32V (X10), V20, V4
VSUXEI64V V4, V20, (X10)
VSOXEI16V V4, V20, (X10)
VLE8FFV (X10), V8
RET
TEXT ·segments(SB), NOSPLIT, $0
VLSEG2E8V (X14), V0
VLSEG4E32V (X14), V0
VLSEG8E64V (X14), V4
VSSEG2E32V V0, (X14)
VSSEG8E8V V4, (X14)
VLSSEG4E32V (X14), X0, V0
VLSSEG8E32V (X10), X0, V4
VLUXSEG2EI32V (X10), V20, V4
VLOXSEG4EI64V (X10), V20, V4
VSUXSEG2EI8V V4, V20, (X10)
VLSEG4E8FFV (X14), V0
RET
TEXT ·wholeReg(SB), NOSPLIT, $0
VL1RV (X10), V8
VL2RV (X10), V16
VL4RV (X10), V0
VL8RV (X10), V0
VS1RV V8, (X10)
VS2RV V16, (X10)
VS4RV V0, (X10)
VS8RV V0, (X10)
VL1RE8V (X10), V8
VL2RE16V (X10), V16
VL4RE32V (X10), V0
VL8RE64V (X10), V0
VL2RE64V (X10), V16
VLMV (X10), V0
VSMV V0, (X10)
RET
TEXT ·arith(SB), NOSPLIT, $0
VADDVV V1, V2, V3
VADDVV V1, V2, V0, V3
VADDVX X10, V2, V0, V3
VADDVI $15, V2, V0, V3
VADDVI $-16, V2, V0, V3
VADDVI $0, V2, V3
VSUBVV V1, V2, V0, V3
VSUBVX X10, V2, V3
VRSUBVX X10, V2, V0, V3
VRSUBVI $15, V2, V0, V3
VANDVI $-1, V2, V3
VORVI $15, V2, V3
VORVI $-16, V2, V3
VXORVI $0, V2, V3
VNEGV V2, V0, V3
VNOTV V2, V3
VIDV V12
VFMVVF F10, V14
VMVVI $15, V14
VMVVI $-16, V14
VMVVV V1, V4
VMVVX X10, V4
VMVXS V4, X10
VFMVSF F10, X11
RET
TEXT ·shiftsSliding(SB), NOSPLIT, $0
VSLLVI $0, V28, V30
VSLLVI $31, V28, V30
VSRLVI $25, V29, V29
VSRAVI $31, V4, V5
VNSRLWI $31, V6, V7
VNSRAWI $0, V6, V7
VSLLVV V1, V2, V3
VSRLVX X10, V2, V3
VSRAVV V1, V2, V3
VRORVI $7, V4, V5
VRORVI $31, V4, V5
VRORVV V1, V2, V3
VROLVX X10, V2, V3
VSLIDEUPVI $31, V4, V5
VSLIDEUPVX X10, V4, V5
VSLIDEDOWNVI $0, V4, V5
VSLIDEDOWNVX X10, V4, V5
VFSLIDE1UPVF F10, V4, V5
VFSLIDE1DOWNVF F10, V4, V5
VRGATHERVI $31, V2, V3
VRGATHERVV V1, V2, V3
VRGATHERVX X10, V2, V3
RET
TEXT ·compareMask(SB), NOSPLIT, $0
VMSEQVV V1, V2, V0
VMSEQVX X10, V2, V0
VMSEQVI $0, V2, V0
VMSNEVI $-16, V2, V0
VMSLTVI $15, V2, V0
VMSLTUVI $15, V2, V0
VMSLEVI $-1, V2, V0
VMSGEVI $15, V2, V0
VMSGEUVI $0, V2, V0
VMSGTVV V1, V2, V0
VMSLEVV V1, V2, V0
VMFEQVF F10, V2, V0
VMFLTVF F10, V2, V0
VMFGEVF F10, V2, V0
VMANDMM V1, V2, V3
VMNANDMM V1, V2, V3
VMANDNMM V1, V2, V3
VMORMM V1, V2, V3
VMXORMM V1, V2, V3
VMXNORMM V1, V2, V3
VMNORMM V1, V2, V3
VMORNMM V1, V2, V3
VMCLRM V1
VMSETM V1
VMNOTM V1, V2
VCPOPM V0, X6
VFIRSTM V0, X7
VIOTAM V0, X5
VMSBFM V0, V1
VMSIFM V0, V1
VMSOFM V0, V1
RET
TEXT ·carryMerge(SB), NOSPLIT, $0
VADCVVM V1, V2, V0, V3
VADCVXM X10, V2, V0, V3
VADCVIM $15, V2, V0, V3
VMADCVV V1, V2, V3
VMADCVX X10, V2, V3
VMADCVI $-16, V2, V3
VSBCVVM V1, V2, V0, V3
VSBCVXM X10, V2, V0, V3
VSBCVVM V1, V2, V0, V3
VSBCVXM X10, V2, V0, V3
VMADCVV V1, V2, V3
VMADCVX X10, V2, V3
VMADCVI $0, V2, V3
VMADCVVM V1, V2, V0, V3
VMERGEVVM V1, V2, V0, V3
VMERGEVXM X10, V2, V0, V3
VMERGEVIM $15, V2, V0, V3
VFMERGEVFM F10, V2, V0, V3
RET
TEXT ·reduceWiden(SB), NOSPLIT, $0
VREDSUMVS V1, V2, V3
VREDMAXUVS V1, V2, V3
VREDMINVS V1, V2, V3
VREDANDVS V1, V2, V3
VREDORVS V1, V2, V3
VREDXORVS V1, V2, V3
VWREDSUMUVS V1, V2, V3
VWREDSUMVS V1, V2, V3
VFWREDOSUMVS V1, V2, V3
VFWREDUSUMVS V1, V2, V3
VWADDUVV V1, V2, V3
VWADDWV V1, V2, V3
VWSUBUVV V1, V2, V3
VWSUBWV V1, V2, V3
VWADDUWX X10, V2, V3
VWADDWX X10, V2, V3
VMULVV V1, V2, V3
VMULHUVV V1, V2, V3
VMULHSUVV V1, V2, V3
VDIVUVV V1, V2, V3
VREMVV V1, V2, V3
VSMULVV V1, V2, V3
VCLMULVV V1, V2, V3
VCLMULHVX X10, V2, V3
RET
TEXT ·fpVec(SB), NOSPLIT, $0
VFADDVV V1, V2, V3
VFADDVF F10, V2, V3
VFSUBVF F10, V2, V3
VFMULVV V1, V2, V3
VFDIVVF F10, V2, V3
VFRSUBVF F10, V2, V3
VFMINVV V1, V2, V3
VFMAXVF F10, V2, V3
VFMACCVV V1, V2, V3
VFMACCVF F10, V2, V3
VFMSACVV V1, V2, V3
VFNMSACVF F10, V2, V3
VFMADDVV V1, V2, V3
VFNMADDVF F10, V2, V3
VFWMACCVV V1, V2, V3
VFWMSACVF F10, V2, V3
VFSQRTV V4, V5
VFCLASSV V4, V5
VFREC7V V4, V5
VFRSQRT7V V4, V5
VFCVTXFV V4, V5
VFCVTRTZXFV V4, V5
VFNCVTFFW V4, V5
VFWCVTFFV V4, V5
VSEXTVF2 V4, V5
VZEXTVF8 V4, V5
RET
+177
View File
@@ -0,0 +1,177 @@
// Copyright (c) 2026 Petr Balvín <opensource@petrbalvin.org> (https://petrbalvin.org)
// SPDX-License-Identifier: BSD-3-Clause
// Seed corpus for FuzzAssembleRISCV64: branches over their offset range, the
// jumps and calls, the system instructions, the atomics with the LR/SC pair,
// the FP arithmetic, compare, conversion and fused multiply-add families in
// every width including quad.
#include "textflag.h"
TEXT ·branches(SB), NOSPLIT, $0
BEQ X5, X6, b1
BNE X5, X6, b2
BLT X5, X6, b1
BGE X5, X6, b2
BLTU X5, X6, b1
BGEU X5, X6, b2
BGT X6, X5, b1
BLE X6, X5, b2
BGTU X6, X5, b1
BLEU X6, X5, b2
b1:
ADDI $1, X5, X5
b2:
ADDI $-1, X6, X6
BEQ X5, X6, b1
RET
TEXT ·farBranch(SB), NOSPLIT, $0
BEQ X5, X6, far
SLTI $2047, X5, X6
BEQ X5, X6, far
far:
SLTIU $2047, X5, X6
BGE X5, X6, far
RET
TEXT ·jumps(SB), NOSPLIT, $0
JAL X1, j1
j1:
JALR X0, (X1)
JALR X1, 0(X5)
JMP j2
j2:
JMP (X5)
CALL (X5)
JMP -3(PC)
CALL runtime·morestack_noctxt(SB)
RET
TEXT ·system(SB), NOSPLIT, $0
FENCE
FENCE.TSO
PAUSE
ECALL
EBREAK
RET
TEXT ·atomics(SB), NOSPLIT, $0
AMOSWAPW X5, (X6), X7
AMOSWAPD X5, (X6), X7
AMOADDW X5, (X6), X7
AMOADDD X5, (X6), X7
AMOANDW X5, (X6), X7
AMOORW X5, (X6), X7
AMOXORW X5, (X6), X7
AMOMINW X5, (X6), X7
AMOMAXW X5, (X6), X7
AMOMINUW X5, (X6), X7
AMOMAXUW X5, (X6), X7
AMOMIND X5, (X6), X7
AMOMAXD X5, (X6), X7
AMOMINUD X5, (X6), X7
AMOMAXUD X5, (X6), X7
LRW (X6), X7
LRD (X6), X7
SCW X5, (X6), X7
SCD X5, (X6), X7
RET
TEXT ·fpArith(SB), NOSPLIT, $0
FADDS F1, F2, F3
FSUBS F1, F2, F3
FMULS F1, F2, F3
FDIVS F1, F2, F3
FADDD F1, F2, F3
FSUBD F1, F2, F3
FMULD F1, F2, F3
FDIVD F1, F2, F3
FADDQ F1, F2, F3
FSUBQ F1, F2, F3
FMULQ F1, F2, F3
FDIVQ F1, F2, F3
FSQRTS F1, F2
FSQRTD F1, F2
FSQRTQ F1, F2
FMINS F1, F2, F3
FMAXS F1, F2, F3
FMIND F1, F2, F3
FMAXD F1, F2, F3
FMINQ F1, F2, F3
FMAXQ F1, F2, F3
RET
TEXT ·fpFma(SB), NOSPLIT, $0
FMADDS F1, F2, F3, F4
FMSUBS F1, F2, F3, F4
FNMSUBS F1, F2, F3, F4
FNMADDS F1, F2, F3, F4
FMADDD F1, F2, F3, F4
FMSUBD F1, F2, F3, F4
FNMSUBD F1, F2, F3, F4
FNMADDD F1, F2, F3, F4
FMADDQ F1, F2, F3, F4
FMSUBQ F1, F2, F3, F4
FNMSUBQ F1, F2, F3, F4
FNMADDQ F1, F2, F3, F4
RET
TEXT ·fpCvt(SB), NOSPLIT, $0
FCVTWS F1, X5
FCVTWUS F1, X5
FCVTLS F1, X5
FCVTLUS F1, X5
FCVTWD F1, X5
FCVTWUD F1, X5
FCVTLD F1, X5
FCVTLUD F1, X5
FCVTSW X5, F1
FCVTSWU X5, F1
FCVTSL X5, F1
FCVTSLU X5, F1
FCVTDW X5, F1
FCVTDWU X5, F1
FCVTDL X5, F1
FCVTDLU X5, F1
FCVTSD F1, F2
FCVTDS F1, F2
FCVTSQ F1, F2
FCVTDQ F1, F2
FCVTQS F1, F2
FCVTQD F1, F2
FCVTWQ F1, X5
FCVTLQ F1, X5
FCVTQW X5, F1
FCVTQL X5, F1
FCLASSS F1, X5
FCLASSD F1, X5
FCLASSQ F1, X5
FMVXD F1, X5
FMVDX X5, F1
FMVXW F1, X5
FMVWX X5, F1
RET
TEXT ·fpSign(SB), NOSPLIT, $0
FSGNJS F1, F0, F2
FSGNJNS F1, F0, F2
FSGNJXS F1, F0, F2
FSGNJD F1, F0, F2
FSGNJND F1, F0, F2
FSGNJXD F1, F0, F2
FLTS F1, F2, X5
FLES F1, F2, X5
FEQS F1, F2, X5
FLTD F1, F2, X5
FLED F1, F2, X5
FEQD F1, F2, X5
FLTQ F1, F2, X5
FLEQ F1, F2, X5
FEQQ F1, F2, X5
RET
+65
View File
@@ -0,0 +1,65 @@
// Copyright (c) 2026 Petr Balvín <opensource@petrbalvin.org> (https://petrbalvin.org)
// SPDX-License-Identifier: BSD-3-Clause
// Seed corpus for FuzzAssembleRISCV64: the Zbb/Zba/Zbs/Zicond bit-manipulation
// and address-generation set, with every unary form's W variant and the
// shamt-range immediate forms.
#include "textflag.h"
TEXT ·unary(SB), NOSPLIT, $0
CLZ X5, X6
CLZW X5, X6
CTZ X5, X6
CTZW X5, X6
CPOP X5, X6
CPOPW X5, X6
SEXTB X5, X6
SEXTH X5, X6
ZEXTH X5, X6
ORCB X5, X6
REV8 X5, X6
RET
TEXT ·rolRor(SB), NOSPLIT, $0
ROL X7, X5, X6
ROR X7, X5, X6
RORI $0, X5, X6
RORI $63, X5, X6
ANDN X7, X5, X6
ORN X7, X5, X6
XNOR X7, X5, X6
MAX X7, X5, X6
MAXU X7, X5, X6
MIN X7, X5, X6
MINU X7, X5, X6
CLMUL X7, X5, X6
CLMULH X7, X5, X6
CLMULR X7, X5, X6
RET
TEXT ·addrGen(SB), NOSPLIT, $0
SH1ADD X7, X5, X6
SH2ADD X7, X5, X6
SH3ADD X7, X5, X6
SH1ADDUW X7, X5, X6
SH2ADDUW X7, X5, X6
SH3ADDUW X7, X5, X6
ADDUW X7, X5, X6
RET
TEXT ·bitImm(SB), NOSPLIT, $0
BCLR $31, X5, X6
BEXT $63, X5, X6
BINV $0, X5, X6
BSET $31, X5, X6
BCLRI $63, X5, X6
BEXTI $31, X5, X6
BINVI $63, X5, X6
BSETI $63, X5, X6
RET
TEXT ·condZero(SB), NOSPLIT, $0
CZEROEQZ X7, X5, X6
CZERONEZ X7, X5, X6
RET