// Copyright (c) 2026 Petr Balvín (https://petrbalvin.org) // SPDX-License-Identifier: BSD-3-Clause #include "textflag.h" // fparith exercises the FP arithmetic set. TEXT ·fparith(SB), NOSPLIT, $0-0 FADDD F0, F1, F2 FSUBD F3, F4, F5 FMULD F6, F7, F8 FDIVD F9, F10, F11 FADDS F12, F13, F14 FSUBS F15, F16, F17 FMULS F18, F19, F20 FDIVS F21, F22, F23 FSQRTD F24, F25 FSQRTS F26, F27 FNEGD F28, F29 FNEGS F30, F31 FABSD F0, F1 FABSS F2, F3 FNMULD F4, F5, F6 FNMULS F7, F8, F9 FMIND F10, F11, F12 FMAXD F13, F14, F15 FMINS F16, F17, F18 FMAXS F19, F20, F21 RET // fpfma exercises fused multiply-add. TEXT ·fpfma(SB), NOSPLIT, $0-0 FMADDD F0, F1, F2, F3 FMSUBD F4, F5, F6, F7 FNMADDD F8, F9, F10, F11 FNMSUBD F12, F13, F14, F15 FMADDS F16, F17, F18, F19 FMSUBS F20, F21, F22, F23 FNMADDS F24, F25, F26, F27 FNMSUBS F28, F29, F30, F0 RET // fpconv exercises FP↔integer conversion and cross-precision. // Syntax: FCVTZSD Fd, Rn (float→int: FP source first, int dest second) // SCVTFD Rn, Fd (int→float: int source first, FP dest second) TEXT ·fpconv(SB), NOSPLIT, $0-0 FCVTSD F0, F1 FCVTDS F2, F3 FCVTZSD F4, R0 FCVTZSS F5, R1 FCVTZUD F6, R2 FCVTZUS F7, R3 SCVTFD R4, F8 SCVTFS R5, F9 UCVTFD R6, F10 UCVTFS R7, F11 SCVTFWD R0, F12 SCVTFWS R1, F13 UCVTFWD R2, F14 UCVTFWS R3, F15 FMOVS F14, R20 FMOVS R21, F15 FMOVD F16, R22 FMOVD R23, F17 RET // fpcmp exercises FP compare and conditional compare. // FCCMP syntax: FCCMP cond, Fn, Fm, $nzcv // FCSEL syntax: FCSEL cond, Fn, Fm, Fd TEXT ·fpcmp(SB), NOSPLIT, $0-0 FCMPS F0, F1 FCMPD F2, F3 FCMPS $0.0, F4 FCMPD $0.0, F5 FCCMPS EQ, F6, F7, $0 FCCMPD NE, F8, F9, $0 FCSELS GE, F10, F11, F12 FCSELD LT, F13, F14, F15 RET // frint exercises FP rounding. TEXT ·frint(SB), NOSPLIT, $0-0 FRINTND F0, F1 FRINTNS F2, F3 FRINTPD F4, F5 FRINTPS F6, F7 FRINTMD F8, F9 FRINTMS F10, F11 FRINTZD F12, F13 FRINTZS F14, F15 FRINTAD F16, F17 FRINTAS F18, F19 FRINTXD F20, F21 FRINTXS F22, F23 FRINTID F24, F25 FRINTIS F26, F27 FMOVD F0, F1 FMOVS F2, F3 RET // condsel exercises conditional select and CRC32. TEXT ·condsel(SB), NOSPLIT, $0-0 CSEL EQ, R0, R1, R2 CSINC NE, R3, R4, R5 CSINV GE, R6, R7, R8 CSNEG LT, R9, R10, R11 CSET EQ, R12 CSETM NE, R13 CINC EQ, R14, R15 CINV NE, R16, R17 CNEG GE, R19, R20 CRC32B R0, R2 CRC32H R3, R5 CRC32W R6, R8 CRC32X R9, R11 CRC32CB R12, R14 CRC32CH R15, R0 CRC32CW R1, R3 CRC32CX R4, R6 RET