25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis/*
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * CDDL HEADER START
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis *
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * The contents of this file are subject to the terms of the
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * Common Development and Distribution License (the "License").
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * You may not use this file except in compliance with the License.
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis *
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * or http://www.opensolaris.org/os/licensing.
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * See the License for the specific language governing permissions
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * and limitations under the License.
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis *
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * When distributing Covered Code, include this CDDL HEADER in each
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * If applicable, add the following below this CDDL HEADER, with the
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * fields enclosed by brackets "[]" replaced with your own identifying
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * information: Portions Copyright [yyyy] [name of copyright owner]
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis *
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * CDDL HEADER END
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis */
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis/*
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * Copyright 2011 Nexenta Systems, Inc. All rights reserved.
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis */
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis/*
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * Use is subject to license terms.
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis */
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#ifndef _M9X_FEX_HANDLER_H
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#define _M9X_FEX_HANDLER_H
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis/* the following enums must match the bit positions in fenv.h */
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtisenum fex_exception {
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fex_inexact = 0,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fex_division = 1,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fex_underflow = 2,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fex_overflow = 3,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fex_inv_zdz = 4,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fex_inv_idi = 5,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fex_inv_isi = 6,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fex_inv_zmi = 7,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fex_inv_sqrt = 8,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fex_inv_snan = 9,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fex_inv_int = 10,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fex_inv_cmp = 11
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis};
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis/* auxiliary functions in __fex_hdlr.c */
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtisextern struct fex_handler_data *__fex_get_thr_handlers(void);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtisextern void __fex_update_te(void);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis/* auxiliary functions in __fex_sym.c */
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtisextern void __fex_sym_init(void);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtisextern char *__fex_sym(char *, char **);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis/* auxiliary functions in fex_log.c */
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtisextern void __fex_mklog(ucontext_t *, char *, int, enum fex_exception,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis int, void *);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis/* system-dependent auxiliary functions */
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtisextern enum fex_exception __fex_get_invalid_type(siginfo_t *, ucontext_t *);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtisextern void __fex_get_op(siginfo_t *, ucontext_t *, fex_info_t *);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtisextern void __fex_st_result(siginfo_t *, ucontext_t *, fex_info_t *);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis/* inline templates and macros for accessing fp state */
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtisextern void __fenv_getfsr(unsigned long *);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtisextern void __fenv_setfsr(const unsigned long *);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#if defined(__sparc)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#define __fenv_get_rd(X) ((X>>30)&0x3)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#define __fenv_set_rd(X,Y) X=(X&~0xc0000000ul)|((Y)<<30)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#define __fenv_get_te(X) ((X>>23)&0x1f)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#define __fenv_set_te(X,Y) X=(X&~0x0f800000ul)|((Y)<<23)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#define __fenv_get_ex(X) ((X>>5)&0x1f)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#define __fenv_set_ex(X,Y) X=(X&~0x000003e0ul)|((Y)<<5)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#elif defined(__x86)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtisextern void __fenv_getcwsw(unsigned int *);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtisextern void __fenv_setcwsw(const unsigned int *);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtisextern void __fenv_getmxcsr(unsigned int *);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtisextern void __fenv_setmxcsr(const unsigned int *);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#define __fenv_get_rd(X) ((X>>26)&3)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#define __fenv_set_rd(X,Y) X=(X&~0x0c000000)|((Y)<<26)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#define __fenv_get_rp(X) ((X>>24)&3)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#define __fenv_set_rp(X,Y) X=(X&~0x03000000)|((Y)<<24)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#define __fenv_get_te(X) ((X>>16)&0x3d)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#define __fenv_set_te(X,Y) X=(X&~0x003d0000)|((Y)<<16)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#define __fenv_get_ex(X) (X&0x3d)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#define __fenv_set_ex(X,Y) X=(X&~0x0000003d)|(Y)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis/*
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * These macros define some useful distinctions between various
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * SSE instructions. In some cases, distinctions are made for
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * the purpose of simplifying the decoding of instructions, while
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * in other cases, they are made for the purpose of simplying the
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * emulation. Note that these values serve as bit flags within
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * the enum values in sseinst_t.
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis */
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#define DOUBLE 0x100
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#define SIMD 0x080
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#define INTREG 0x040
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtistypedef union {
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis double d[2];
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis long long l[2];
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis float f[4];
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis int i[4];
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis} sseoperand_t;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis/* structure to hold a decoded SSE instruction */
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtistypedef struct {
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis enum {
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis /* single precision scalar instructions */
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis cmpss = 0,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis minss = 1,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis maxss = 2,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis addss = 3,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis subss = 4,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis mulss = 5,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis divss = 6,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis sqrtss = 7,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ucomiss = 16,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis comiss = 17,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis cvtss2sd = 32,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis cvtsi2ss = INTREG + 0,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis cvttss2si = INTREG + 1,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis cvtss2si = INTREG + 2,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis cvtsi2ssq = INTREG + 8,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis cvttss2siq = INTREG + 9,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis cvtss2siq = INTREG + 10,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis /* single precision SIMD instructions */
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis cmpps = SIMD + 0,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis minps = SIMD + 1,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis maxps = SIMD + 2,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis addps = SIMD + 3,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis subps = SIMD + 4,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis mulps = SIMD + 5,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis divps = SIMD + 6,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis sqrtps = SIMD + 7,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis cvtps2pd = SIMD + 32,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis cvtdq2ps = SIMD + 34,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis cvttps2dq = SIMD + 35,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis cvtps2dq = SIMD + 36,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis cvtpi2ps = SIMD + INTREG + 0,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis cvttps2pi = SIMD + INTREG + 1,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis cvtps2pi = SIMD + INTREG + 2,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis /* double precision scalar instructions */
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis cmpsd = DOUBLE + 0,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis minsd = DOUBLE + 1,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis maxsd = DOUBLE + 2,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis addsd = DOUBLE + 3,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis subsd = DOUBLE + 4,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis mulsd = DOUBLE + 5,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis divsd = DOUBLE + 6,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis sqrtsd = DOUBLE + 7,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ucomisd = DOUBLE + 16,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis comisd = DOUBLE + 17,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis cvtsd2ss = DOUBLE + 32,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis cvtsi2sd = DOUBLE + INTREG + 0,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis cvttsd2si = DOUBLE + INTREG + 1,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis cvtsd2si = DOUBLE + INTREG + 2,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis cvtsi2sdq = DOUBLE + INTREG + 8,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis cvttsd2siq = DOUBLE + INTREG + 9,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis cvtsd2siq = DOUBLE + INTREG + 10,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis /* double precision SIMD instructions */
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis cmppd = DOUBLE + SIMD + 0,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis minpd = DOUBLE + SIMD + 1,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis maxpd = DOUBLE + SIMD + 2,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis addpd = DOUBLE + SIMD + 3,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis subpd = DOUBLE + SIMD + 4,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis mulpd = DOUBLE + SIMD + 5,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis divpd = DOUBLE + SIMD + 6,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis sqrtpd = DOUBLE + SIMD + 7,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis cvtpd2ps = DOUBLE + SIMD + 32,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis cvtdq2pd = DOUBLE + SIMD + 34,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis cvttpd2dq = DOUBLE + SIMD + 35,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis cvtpd2dq = DOUBLE + SIMD + 36,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis cvtpi2pd = DOUBLE + SIMD + INTREG + 0,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis cvttpd2pi = DOUBLE + SIMD + INTREG + 1,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis cvtpd2pi = DOUBLE + SIMD + INTREG + 2,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis } op;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis int imm;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis sseoperand_t *op1, *op2;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis} sseinst_t;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis/* x86-specific auxiliary functions */
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtisextern int *__fex_accrued(void);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtisextern void __fex_get_x86_exc(siginfo_t *, ucontext_t *);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtisextern int __fex_parse_sse(ucontext_t *, sseinst_t *);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtisextern enum fex_exception __fex_get_sse_op(ucontext_t *, sseinst_t *,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fex_info_t *);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtisextern void __fex_get_simd_op(ucontext_t *, sseinst_t *,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis enum fex_exception *, fex_info_t *);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtisextern void __fex_st_sse_result(ucontext_t *, sseinst_t *,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis enum fex_exception, fex_info_t *);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtisextern void __fex_st_simd_result(ucontext_t *, sseinst_t *,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis enum fex_exception *, fex_info_t *);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#else
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#error Unknown architecture
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#endif
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#endif /* _M9X_FEX_HANDLER_H */