61 lines
1.5 KiB
ArmAsm
61 lines
1.5 KiB
ArmAsm
// 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
|