xref: /freebsd-src/sys/powerpc/fpu/fpu_instr.h (revision 29363fb446372cb3f10bc98664e9767c53fbb457)
17e76048aSMarcel Moolenaar /*	$NetBSD: instr.h,v 1.4 2005/12/11 12:18:43 christos Exp $ */
27e76048aSMarcel Moolenaar 
3*51369649SPedro F. Giffuni /*-
4*51369649SPedro F. Giffuni  * SPDX-License-Identifier: BSD-3-Clause
5*51369649SPedro F. Giffuni  *
67e76048aSMarcel Moolenaar  * Copyright (c) 1992, 1993
77e76048aSMarcel Moolenaar  *	The Regents of the University of California.  All rights reserved.
87e76048aSMarcel Moolenaar  *
97e76048aSMarcel Moolenaar  * This software was developed by the Computer Systems Engineering group
107e76048aSMarcel Moolenaar  * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
117e76048aSMarcel Moolenaar  * contributed to Berkeley.
127e76048aSMarcel Moolenaar  *
137e76048aSMarcel Moolenaar  * All advertising materials mentioning features or use of this software
147e76048aSMarcel Moolenaar  * must display the following acknowledgement:
157e76048aSMarcel Moolenaar  *	This product includes software developed by the University of
167e76048aSMarcel Moolenaar  *	California, Lawrence Berkeley Laboratory.
177e76048aSMarcel Moolenaar  *
187e76048aSMarcel Moolenaar  * Redistribution and use in source and binary forms, with or without
197e76048aSMarcel Moolenaar  * modification, are permitted provided that the following conditions
207e76048aSMarcel Moolenaar  * are met:
217e76048aSMarcel Moolenaar  * 1. Redistributions of source code must retain the above copyright
227e76048aSMarcel Moolenaar  *    notice, this list of conditions and the following disclaimer.
237e76048aSMarcel Moolenaar  * 2. Redistributions in binary form must reproduce the above copyright
247e76048aSMarcel Moolenaar  *    notice, this list of conditions and the following disclaimer in the
257e76048aSMarcel Moolenaar  *    documentation and/or other materials provided with the distribution.
267e76048aSMarcel Moolenaar  * 3. Neither the name of the University nor the names of its contributors
277e76048aSMarcel Moolenaar  *    may be used to endorse or promote products derived from this software
287e76048aSMarcel Moolenaar  *    without specific prior written permission.
297e76048aSMarcel Moolenaar  *
307e76048aSMarcel Moolenaar  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
317e76048aSMarcel Moolenaar  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
327e76048aSMarcel Moolenaar  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
337e76048aSMarcel Moolenaar  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
347e76048aSMarcel Moolenaar  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
357e76048aSMarcel Moolenaar  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
367e76048aSMarcel Moolenaar  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
377e76048aSMarcel Moolenaar  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
387e76048aSMarcel Moolenaar  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
397e76048aSMarcel Moolenaar  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
407e76048aSMarcel Moolenaar  * SUCH DAMAGE.
417e76048aSMarcel Moolenaar  */
427e76048aSMarcel Moolenaar 
437e76048aSMarcel Moolenaar /*
447e76048aSMarcel Moolenaar  * An instruction.
457e76048aSMarcel Moolenaar  */
467e76048aSMarcel Moolenaar union instr {
477e76048aSMarcel Moolenaar 	int	i_int;			/* as a whole */
487e76048aSMarcel Moolenaar 
497e76048aSMarcel Moolenaar 	/*
507e76048aSMarcel Moolenaar 	 * Any instruction type.
517e76048aSMarcel Moolenaar 	 */
527e76048aSMarcel Moolenaar 	struct {
537e76048aSMarcel Moolenaar 		u_int	i_opcd:6;	/* first-level decode */
547e76048aSMarcel Moolenaar 		u_int	:25;
557e76048aSMarcel Moolenaar 		u_int	i_rc:1;
567e76048aSMarcel Moolenaar 	} i_any;
577e76048aSMarcel Moolenaar 
587e76048aSMarcel Moolenaar 	/*
597e76048aSMarcel Moolenaar 	 * Format A
607e76048aSMarcel Moolenaar 	 */
617e76048aSMarcel Moolenaar 	struct {
627e76048aSMarcel Moolenaar 		u_int	i_opcd:6;
637e76048aSMarcel Moolenaar 		u_int	i_frt:5;
647e76048aSMarcel Moolenaar 		u_int	i_fra:5;
657e76048aSMarcel Moolenaar 		u_int	i_frb:5;
667e76048aSMarcel Moolenaar 		u_int	i_frc:5;
677e76048aSMarcel Moolenaar 		u_int	i_xo:5;
687e76048aSMarcel Moolenaar 		u_int	i_rc:1;
697e76048aSMarcel Moolenaar 	} i_a;
707e76048aSMarcel Moolenaar 
717e76048aSMarcel Moolenaar 	/*
727e76048aSMarcel Moolenaar 	 * Format B
737e76048aSMarcel Moolenaar 	 */
747e76048aSMarcel Moolenaar 	struct {
757e76048aSMarcel Moolenaar 		u_int	i_opcd:6;
767e76048aSMarcel Moolenaar 		int	i_bo:5;
777e76048aSMarcel Moolenaar 		int	i_bi:5;
787e76048aSMarcel Moolenaar 		int	i_bd:14;
797e76048aSMarcel Moolenaar 		int	i_aa:1;
807e76048aSMarcel Moolenaar 		int	i_lk:1;
817e76048aSMarcel Moolenaar 	} i_b;
827e76048aSMarcel Moolenaar 
837e76048aSMarcel Moolenaar 	/*
847e76048aSMarcel Moolenaar 	 * Format D
857e76048aSMarcel Moolenaar 	 */
867e76048aSMarcel Moolenaar 	struct {
877e76048aSMarcel Moolenaar 		u_int	i_opcd:6;
887e76048aSMarcel Moolenaar 		u_int	i_rs:5;
897e76048aSMarcel Moolenaar 		u_int	i_ra:5;
907e76048aSMarcel Moolenaar 		int	i_d:16;
917e76048aSMarcel Moolenaar 	} i_d;
927e76048aSMarcel Moolenaar 
937e76048aSMarcel Moolenaar 	/*
947e76048aSMarcel Moolenaar 	 * Format DE
957e76048aSMarcel Moolenaar 	 */
967e76048aSMarcel Moolenaar 	struct {
977e76048aSMarcel Moolenaar 		u_int	i_opcd:6;
987e76048aSMarcel Moolenaar 		u_int	i_rs:5;
997e76048aSMarcel Moolenaar 		u_int	i_ra:5;
1007e76048aSMarcel Moolenaar 		int	i_d:12;
1017e76048aSMarcel Moolenaar 		u_int	i_xo:4;
1027e76048aSMarcel Moolenaar 	} i_de;
1037e76048aSMarcel Moolenaar 
1047e76048aSMarcel Moolenaar 	/*
1057e76048aSMarcel Moolenaar 	 * Format I
1067e76048aSMarcel Moolenaar 	 */
1077e76048aSMarcel Moolenaar 	struct {
1087e76048aSMarcel Moolenaar 		u_int	i_opcd:6;
1097e76048aSMarcel Moolenaar 		int	i_li:24;
1107e76048aSMarcel Moolenaar 		int	i_aa:1;
1117e76048aSMarcel Moolenaar 		int	i_lk:1;
1127e76048aSMarcel Moolenaar 	} i_i;
1137e76048aSMarcel Moolenaar 
1147e76048aSMarcel Moolenaar 	/*
1157e76048aSMarcel Moolenaar 	 * Format M
1167e76048aSMarcel Moolenaar 	 */
1177e76048aSMarcel Moolenaar 	struct {
1187e76048aSMarcel Moolenaar 		u_int	i_opcd:6;
1197e76048aSMarcel Moolenaar 		u_int	i_rs:5;
1207e76048aSMarcel Moolenaar 		u_int	i_ra:5;
1217e76048aSMarcel Moolenaar 		u_int	i_rb:5;
1227e76048aSMarcel Moolenaar 		int	i_mb:5;
1237e76048aSMarcel Moolenaar 		int	i_me:5;
1247e76048aSMarcel Moolenaar 		u_int	i_rc:1;
1257e76048aSMarcel Moolenaar 	} i_m;
1267e76048aSMarcel Moolenaar 
1277e76048aSMarcel Moolenaar 	/*
1287e76048aSMarcel Moolenaar 	 * Format MD
1297e76048aSMarcel Moolenaar 	 */
1307e76048aSMarcel Moolenaar 	struct {
1317e76048aSMarcel Moolenaar 		u_int	i_opcd:6;
1327e76048aSMarcel Moolenaar 		u_int	i_rs:5;
1337e76048aSMarcel Moolenaar 		u_int	i_ra:5;
1347e76048aSMarcel Moolenaar 		u_int	i_rb:5;
1357e76048aSMarcel Moolenaar 		int	i_sh1_5:5;
1367e76048aSMarcel Moolenaar 		int	i_mb:6;
1377e76048aSMarcel Moolenaar 		u_int	i_xo:3;
1387e76048aSMarcel Moolenaar 		int	i_sh0:2;
1397e76048aSMarcel Moolenaar 		u_int	i_rc:1;
1407e76048aSMarcel Moolenaar 	} i_md;
1417e76048aSMarcel Moolenaar 
1427e76048aSMarcel Moolenaar 	/*
1437e76048aSMarcel Moolenaar 	 * Format MDS
1447e76048aSMarcel Moolenaar 	 */
1457e76048aSMarcel Moolenaar 	struct {
1467e76048aSMarcel Moolenaar 		u_int	i_opcd:6;
1477e76048aSMarcel Moolenaar 		u_int	i_rs:5;
1487e76048aSMarcel Moolenaar 		u_int	i_ra:5;
1497e76048aSMarcel Moolenaar 		u_int	i_rb:5;
1507e76048aSMarcel Moolenaar 		int	i_sh:5;
1517e76048aSMarcel Moolenaar 		int	i_mb:6;
1527e76048aSMarcel Moolenaar 		u_int	i_xo:4;
1537e76048aSMarcel Moolenaar 		u_int	i_rc:1;
1547e76048aSMarcel Moolenaar 	} i_mds;
1557e76048aSMarcel Moolenaar 
1567e76048aSMarcel Moolenaar 	/*
1577e76048aSMarcel Moolenaar 	 * Format S
1587e76048aSMarcel Moolenaar 	 */
1597e76048aSMarcel Moolenaar 	struct {
1607e76048aSMarcel Moolenaar 		u_int	i_opcd:6;
1617e76048aSMarcel Moolenaar 		int	:24;
1627e76048aSMarcel Moolenaar 		int	i_i:1;
1637e76048aSMarcel Moolenaar 		int	:1;
1647e76048aSMarcel Moolenaar 	} i_s;
1657e76048aSMarcel Moolenaar 
1667e76048aSMarcel Moolenaar 	/*
1677e76048aSMarcel Moolenaar 	 * Format X
1687e76048aSMarcel Moolenaar 	 */
1697e76048aSMarcel Moolenaar 	struct {
1707e76048aSMarcel Moolenaar 		u_int	i_opcd:6;
1717e76048aSMarcel Moolenaar 		u_int	i_rs:5;
1727e76048aSMarcel Moolenaar 		u_int	i_ra:5;
1737e76048aSMarcel Moolenaar 		u_int	i_rb:5;
1747e76048aSMarcel Moolenaar 		u_int	i_xo:10;
1757e76048aSMarcel Moolenaar 		u_int	i_rc:1;
1767e76048aSMarcel Moolenaar 	} i_x;
1777e76048aSMarcel Moolenaar 
1787e76048aSMarcel Moolenaar 	/*
1797e76048aSMarcel Moolenaar 	 * Format XFL
1807e76048aSMarcel Moolenaar 	 */
1817e76048aSMarcel Moolenaar 	struct {
1827e76048aSMarcel Moolenaar 		u_int	i_opcd:6;
1837e76048aSMarcel Moolenaar 		int	:1;
1847e76048aSMarcel Moolenaar 		int	i_flm:8;
1857e76048aSMarcel Moolenaar 		int	:1;
1867e76048aSMarcel Moolenaar 		int	i_frb:5;
1877e76048aSMarcel Moolenaar 		u_int	i_xo:10;
1887e76048aSMarcel Moolenaar 		int	:1;
1897e76048aSMarcel Moolenaar 	} i_xfl;
1907e76048aSMarcel Moolenaar 
1917e76048aSMarcel Moolenaar 	/*
1927e76048aSMarcel Moolenaar 	 * Format XFX
1937e76048aSMarcel Moolenaar 	 */
1947e76048aSMarcel Moolenaar 	struct {
1957e76048aSMarcel Moolenaar 		u_int	i_opcd:6;
1967e76048aSMarcel Moolenaar 		int	i_dcrn:10;
1977e76048aSMarcel Moolenaar 		u_int	i_xo:10;
1987e76048aSMarcel Moolenaar 		int	:1;
1997e76048aSMarcel Moolenaar 	} i_xfx;
2007e76048aSMarcel Moolenaar 
2017e76048aSMarcel Moolenaar 	/*
2027e76048aSMarcel Moolenaar 	 * Format XL
2037e76048aSMarcel Moolenaar 	 */
2047e76048aSMarcel Moolenaar 	struct {
2057e76048aSMarcel Moolenaar 		u_int	i_opcd:6;
2067e76048aSMarcel Moolenaar 		int	i_bt:5;
2077e76048aSMarcel Moolenaar 		int	i_ba:5;
2087e76048aSMarcel Moolenaar 		int	i_bb:5;
2097e76048aSMarcel Moolenaar 		u_int	i_xo:10;
2107e76048aSMarcel Moolenaar 		int	i_lk:1;
2117e76048aSMarcel Moolenaar 	} i_xl;
2127e76048aSMarcel Moolenaar 
2137e76048aSMarcel Moolenaar 	/*
2147e76048aSMarcel Moolenaar 	 * Format XS
2157e76048aSMarcel Moolenaar 	 */
2167e76048aSMarcel Moolenaar 	struct {
2177e76048aSMarcel Moolenaar 		u_int	i_opcd:6;
2187e76048aSMarcel Moolenaar 		u_int	i_rs:5;
2197e76048aSMarcel Moolenaar 		u_int	i_ra:5;
2207e76048aSMarcel Moolenaar 		int	i_sh0_4:5;
2217e76048aSMarcel Moolenaar 		u_int	i_xo:9;
2227e76048aSMarcel Moolenaar 		int	i_sh5:1;
2237e76048aSMarcel Moolenaar 		u_int	i_rc:1;
2247e76048aSMarcel Moolenaar 	} i_xs;
2257e76048aSMarcel Moolenaar 
2267e76048aSMarcel Moolenaar };
2277e76048aSMarcel Moolenaar 
2287e76048aSMarcel Moolenaar #define	i_rt	i_rs
2297e76048aSMarcel Moolenaar 
2307e76048aSMarcel Moolenaar /*
2317e76048aSMarcel Moolenaar  * Primary opcode numbers:
2327e76048aSMarcel Moolenaar  */
2337e76048aSMarcel Moolenaar 
2347e76048aSMarcel Moolenaar #define	OPC_TDI		0x02
2357e76048aSMarcel Moolenaar #define	OPC_TWI		0x03
2367e76048aSMarcel Moolenaar #define	OPC_MULLI	0x07
2377e76048aSMarcel Moolenaar #define	OPC_SUBFIC	0x08
2387e76048aSMarcel Moolenaar #define	OPC_BCE		0x09
2397e76048aSMarcel Moolenaar #define	OPC_CMPLI	0x0a
2407e76048aSMarcel Moolenaar #define	OPC_CMPI	0x0b
2417e76048aSMarcel Moolenaar #define	OPC_ADDIC	0x0c
2427e76048aSMarcel Moolenaar #define	OPC_ADDIC_DOT	0x0d
2437e76048aSMarcel Moolenaar #define	OPC_ADDI	0x0e
2447e76048aSMarcel Moolenaar #define	OPC_ADDIS	0x0f
2457e76048aSMarcel Moolenaar #define	OPC_BC		0x10
2467e76048aSMarcel Moolenaar #define	OPC_SC		0x11
2477e76048aSMarcel Moolenaar #define	OPC_B		0x12
2487e76048aSMarcel Moolenaar #define	OPC_branch_19	0x13
2497e76048aSMarcel Moolenaar #define	OPC_RLWIMI	0x14
2507e76048aSMarcel Moolenaar #define	OPC_RLWINM	0x15
2517e76048aSMarcel Moolenaar #define	OPC_BE		0x16
2527e76048aSMarcel Moolenaar #define	OPC_RLWNM	0x17
2537e76048aSMarcel Moolenaar #define	OPC_ORI		0x18
2547e76048aSMarcel Moolenaar #define	OPC_ORIS	0x19
2557e76048aSMarcel Moolenaar #define	OPC_XORI	0x1a
2567e76048aSMarcel Moolenaar #define	OPC_XORIS	0x1b
2577e76048aSMarcel Moolenaar #define	OPC_ANDI	0x1c
2587e76048aSMarcel Moolenaar #define	OPC_ANDIS	0x1d
2597e76048aSMarcel Moolenaar #define	OPC_dwe_rot_30	0x1e
2607e76048aSMarcel Moolenaar #define	OPC_integer_31	0x1f
2617e76048aSMarcel Moolenaar #define	OPC_LWZ		0x20
2627e76048aSMarcel Moolenaar #define	OPC_LWZU	0x21
2637e76048aSMarcel Moolenaar #define	OPC_LBZ		0x22
2647e76048aSMarcel Moolenaar #define	OPC_LBZU	0x23
2657e76048aSMarcel Moolenaar #define	OPC_STW		0x24
2667e76048aSMarcel Moolenaar #define	OPC_STWU	0x25
2677e76048aSMarcel Moolenaar #define	OPC_STB		0x26
2687e76048aSMarcel Moolenaar #define	OPC_STBU	0x27
2697e76048aSMarcel Moolenaar #define	OPC_LHZ		0x28
2707e76048aSMarcel Moolenaar #define	OPC_LHZU	0x29
2717e76048aSMarcel Moolenaar #define	OPC_LHA		0x2a
2727e76048aSMarcel Moolenaar #define	OPC_LHAU	0x2b
2737e76048aSMarcel Moolenaar #define	OPC_STH		0x2c
2747e76048aSMarcel Moolenaar #define	OPC_STHU	0x2d
2757e76048aSMarcel Moolenaar #define	OPC_LMW		0x2e
2767e76048aSMarcel Moolenaar #define	OPC_STMW	0x2f
2777e76048aSMarcel Moolenaar #define	OPC_LFS		0x30
2787e76048aSMarcel Moolenaar #define	OPC_LFSU	0x31
2797e76048aSMarcel Moolenaar #define	OPC_LFD		0x32
2807e76048aSMarcel Moolenaar #define	OPC_LFDU	0x33
2817e76048aSMarcel Moolenaar #define	OPC_STFS	0x34
2827e76048aSMarcel Moolenaar #define	OPC_STFSU	0x35
2837e76048aSMarcel Moolenaar #define	OPC_STFD	0x36
2847e76048aSMarcel Moolenaar #define	OPC_STFDU	0x37
2857e76048aSMarcel Moolenaar #define	OPC_load_st_58	0x3a
2867e76048aSMarcel Moolenaar #define	OPC_sp_fp_59	0x3b
2877e76048aSMarcel Moolenaar #define	OPC_load_st_62	0x3e
2887e76048aSMarcel Moolenaar #define	OPC_dp_fp_63	0x3f
2897e76048aSMarcel Moolenaar 
2907e76048aSMarcel Moolenaar /*
2917e76048aSMarcel Moolenaar  * Opcode 31 sub-types (FP only)
2927e76048aSMarcel Moolenaar  */
2937e76048aSMarcel Moolenaar #define	OPC31_TW	0x004
2947e76048aSMarcel Moolenaar #define	OPC31_LFSX	0x217
2957e76048aSMarcel Moolenaar #define	OPC31_LFSUX	0x237
2967e76048aSMarcel Moolenaar #define	OPC31_LFDX	0x257
2977e76048aSMarcel Moolenaar #define	OPC31_LFDUX	0x277
2987e76048aSMarcel Moolenaar #define	OPC31_STFSX	0x297
2997e76048aSMarcel Moolenaar #define	OPC31_STFSUX	0x2b7
3007e76048aSMarcel Moolenaar #define	OPC31_STFDX	0x2d7
3017e76048aSMarcel Moolenaar #define	OPC31_STFDUX	0x2f7
3027e76048aSMarcel Moolenaar #define	OPC31_STFIWX	0x3d7
3037e76048aSMarcel Moolenaar 
3047e76048aSMarcel Moolenaar /* Mask for all valid indexed FP load/store ops (except stfiwx) */
3057e76048aSMarcel Moolenaar #define	OPC31_FPMASK	0x31f
3067e76048aSMarcel Moolenaar #define	OPC31_FPOP	0x217
3077e76048aSMarcel Moolenaar 
3087e76048aSMarcel Moolenaar /*
3097e76048aSMarcel Moolenaar  * Opcode 59 sub-types:
3107e76048aSMarcel Moolenaar  */
3117e76048aSMarcel Moolenaar 
3127e76048aSMarcel Moolenaar #define	OPC59_FDIVS	0x12
3137e76048aSMarcel Moolenaar #define	OPC59_FSUBS	0x14
3147e76048aSMarcel Moolenaar #define	OPC59_FADDS	0x15
3157e76048aSMarcel Moolenaar #define	OPC59_FSQRTS	0x16
3167e76048aSMarcel Moolenaar #define	OPC59_FRES	0x18
3177e76048aSMarcel Moolenaar #define	OPC59_FMULS	0x19
3187e76048aSMarcel Moolenaar #define	OPC59_FMSUBS	0x1c
3197e76048aSMarcel Moolenaar #define	OPC59_FMADDS	0x1d
3207e76048aSMarcel Moolenaar #define	OPC59_FNMSUBS	0x1e
3217e76048aSMarcel Moolenaar #define	OPC59_FNMADDS	0x1f
3227e76048aSMarcel Moolenaar 
3237e76048aSMarcel Moolenaar /*
3247e76048aSMarcel Moolenaar  * Opcode 62 sub-types:
3257e76048aSMarcel Moolenaar  */
3267e76048aSMarcel Moolenaar #define	OPC62_LDE	0x0
3277e76048aSMarcel Moolenaar #define	OPC62_LDEU	0x1
3287e76048aSMarcel Moolenaar #define	OPC62_LFSE	0x4
3297e76048aSMarcel Moolenaar #define	OPC62_LFSEU	0x5
3307e76048aSMarcel Moolenaar #define	OPC62_LFDE	0x6
3317e76048aSMarcel Moolenaar #define	OPC62_LFDEU	0x7
3327e76048aSMarcel Moolenaar #define	OPC62_STDE	0x8
3337e76048aSMarcel Moolenaar #define	OPC62_STDEU	0x9
3347e76048aSMarcel Moolenaar #define	OPC62_STFSE	0xc
3357e76048aSMarcel Moolenaar #define	OPC62_STFSEU	0xd
3367e76048aSMarcel Moolenaar #define	OPC62_STFDE	0xe
3377e76048aSMarcel Moolenaar #define	OPC62_STFDEU	0xf
3387e76048aSMarcel Moolenaar 
3397e76048aSMarcel Moolenaar /*
3407e76048aSMarcel Moolenaar  * Opcode 63 sub-types:
3417e76048aSMarcel Moolenaar  *
3427e76048aSMarcel Moolenaar  * (The first group are masks....)
3437e76048aSMarcel Moolenaar  */
3447e76048aSMarcel Moolenaar 
3457e76048aSMarcel Moolenaar #define	OPC63M_MASK	0x10
3467e76048aSMarcel Moolenaar #define	OPC63M_FDIV	0x12
3477e76048aSMarcel Moolenaar #define	OPC63M_FSUB	0x14
3487e76048aSMarcel Moolenaar #define	OPC63M_FADD	0x15
3497e76048aSMarcel Moolenaar #define	OPC63M_FSQRT	0x16
3507e76048aSMarcel Moolenaar #define	OPC63M_FSEL	0x17
3517e76048aSMarcel Moolenaar #define	OPC63M_FMUL	0x19
3527e76048aSMarcel Moolenaar #define	OPC63M_FRSQRTE	0x1a
3537e76048aSMarcel Moolenaar #define	OPC63M_FMSUB	0x1c
3547e76048aSMarcel Moolenaar #define	OPC63M_FMADD	0x1d
3557e76048aSMarcel Moolenaar #define	OPC63M_FNMSUB	0x1e
3567e76048aSMarcel Moolenaar #define	OPC63M_FNMADD	0x1f
3577e76048aSMarcel Moolenaar 
3587e76048aSMarcel Moolenaar #define	OPC63_FCMPU	0x00
3597e76048aSMarcel Moolenaar #define	OPC63_FRSP	0x0c
3607e76048aSMarcel Moolenaar #define	OPC63_FCTIW	0x0e
3617e76048aSMarcel Moolenaar #define	OPC63_FCTIWZ	0x0f
3627e76048aSMarcel Moolenaar #define	OPC63_FCMPO	0x20
3637e76048aSMarcel Moolenaar #define	OPC63_MTFSB1	0x26
3647e76048aSMarcel Moolenaar #define	OPC63_FNEG	0x28
3657e76048aSMarcel Moolenaar #define	OPC63_MCRFS	0x40
3667e76048aSMarcel Moolenaar #define	OPC63_MTFSB0	0x46
3677e76048aSMarcel Moolenaar #define	OPC63_FMR	0x48
3687e76048aSMarcel Moolenaar #define	OPC63_MTFSFI	0x86
3697e76048aSMarcel Moolenaar #define	OPC63_FNABS	0x88
3707e76048aSMarcel Moolenaar #define	OPC63_FABS	0x108
3717e76048aSMarcel Moolenaar #define	OPC63_MFFS	0x247
3727e76048aSMarcel Moolenaar #define	OPC63_MTFSF	0x2c7
3737e76048aSMarcel Moolenaar #define	OPC63_FCTID	0x32e
3747e76048aSMarcel Moolenaar #define	OPC63_FCTIDZ	0x32f
3757e76048aSMarcel Moolenaar #define	OPC63_FCFID	0x34e
3767e76048aSMarcel Moolenaar 
3777e76048aSMarcel Moolenaar /*
3787e76048aSMarcel Moolenaar  * FPU data types.
3797e76048aSMarcel Moolenaar  */
3807e76048aSMarcel Moolenaar #define FTYPE_LNG	-1	/* data = 64-bit signed long integer */
3817e76048aSMarcel Moolenaar #define	FTYPE_INT	0	/* data = 32-bit signed integer */
3827e76048aSMarcel Moolenaar #define	FTYPE_SNG	1	/* data = 32-bit float */
3837e76048aSMarcel Moolenaar #define	FTYPE_DBL	2	/* data = 64-bit double */
384