25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * CDDL HEADER START
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 * 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 * 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 * CDDL HEADER END
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * Copyright 2011 Nexenta Systems, Inc. All rights reserved.
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * Use is subject to license terms.
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * ELEVENBIT table and order 5 POLYNOMIAL no explicit correction t
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x3ea62e42,0xfee00000 ! scaled by 2**-20
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x3caa39ef,0x35793c76 ! scaled by 2**-20
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! sizeof temp storage - must be a multiple of 16 for V9
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! o5 used in .rangeI check section as temporary
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! f50 0xffff8000... or 0xfffffc00 for 6 or 11 bit tbl resp
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis!--------------------------------------------------------------------
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis!--------------------------------------------------------------------
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis!--------------------------------------------------------------------
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis!--------------------------------------------------------------------
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis!--------------------------------------------------------------------
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis wr %g0,0x82,%asi ! set %asi for non-faulting loads
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ld [L5_CONSTANTS+ox43200000],CONSTE432_f29
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fpadd32s P0_X1,TTOPMSK,P0_f2 ! X+TTOP !X1 START
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fands P0_f2,INF_f28,P0_f2 ! (X+TTOP)&INF->n X1
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis!############################# AREA 1 (0-19) ###################################!
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis!>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 1.1 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<!
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis!!!!!!!!!!!!!!!!!!!!!!!!!!!!CYCLE 0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmuld P1_f44,FP48_A2,P1_f46 ! s^2,A2 ! X2-2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis bge,pn %icc,.range0 ! ix<=0x000fffff or >=0x7ff00000 ! X1
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fpsub32s P0_X1,P0_f2,P0_X1 ! X - n -> x ! X1
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd P0_f4,P0_f34,P0_f34 !n*l2lo,lylo ! X1-2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fsubd FP40_TWO,P2_f24,P2_f24 ! two - xT ! X3-2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis!>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 1.2 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<!
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fpadd32s P0_X1,CONST_f30,P0_f4 ! x round up X1
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd P0_f36,P0_f34,P0_f36 ! + n*l2lo+lylo X1-2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmuld T0_f8,FP60_LN2HI,T0_f8 ! n*l2hi ! X1-2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmuld T1_f18,FP62_LN2LO,P1_f12 ! n*l2lo ! X2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd P1_f46,FP38_A1,P1_f46 ! (s^2*A2), A1 X2-2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis srl %l0,10,%l0 ! j=(j>>11)&0x1f0 !ELEVENBIT ! X1
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fsubd P2_f24,P2_X3,P2_f24 ! (two - xT) - x ! !X3-2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis!>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 1.3 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<!
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ! x-roundedup & 0xffff8000 -> xT i.e 11bit value of x
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd P0_f36,P0_f32,P0_f36 ! + (x-xT) X1-2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmuld P1_f46,P1_f44,P1_f46 ! s^2*A2+A1 , s^2 X2-2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd P1_f12,P1_f44,P1_f44 !n*l2lo,lylo ! X2-2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis!>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 1.4 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<!
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd P1_f46,P1_f14,P1_f46 ! (s^2*A2+A1)s^2 + (2-xT-x) X2-2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fpadd32s P1_X2,TTOPMSK,P1_f12 ! X + TTOP ! X2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis!>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 1.5 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<!
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmuld P1_f16,P1_f46,P1_f46 ! s*(POLY) ! X2-2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmuld P2_f26,P2_f26,P2_f54 ! z = s * s ! !X3-2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis!############################# AREA 2 (20#39) ###################################!
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis!>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 2.1 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<!
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd P1_f46,P1_f44,P1_f46 ! + n*l2lo+lylo X2-2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis bge,pn %icc,.range1 ! ix<=0x000fffff or >=0x7ff00000 ! X2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fpsub32s P1_X2,P1_f12,P1_X2 ! X - n -> x ! X2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmuld P2_f54,FP48_A2,P2_f56 ! s^2,A2! X3-2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis!>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 2.2 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<!
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd P1_f46,P1_f42,P1_f46 ! + (x-xT) X2-2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fpadd32s P1_X2,CONST_f30,P1_f14 ! x round up X2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd P2_f56,FP38_A1,P2_f56 ! (s^2*A2), A1 X3-2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis!>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 2.3 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<!
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fsubd FP40_TWO,P0_f4,P0_f4 ! two - xT ! X1
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmuld T1_f18,FP60_LN2HI,T1_f18 ! n*l2hi ! X2-2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmuld P2_f56,P2_f54,P2_f56 ! s^2*A2+A1 , s^2 X3-2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis!>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 2.4 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<!
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fsubd P0_f4,P0_X1,P0_f4 ! (two - xT) - x ! !X1
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fpadd32s P2_X3,TTOPMSK,P2_f22 ! X + TTOP ! X3
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd P1_f46,T1_f18,P1_f46 ! + n*l2hi X2-2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis srl %l1,10,%l1 ! j=(j>>11)&0x1f0 !ELEVENBIT ! X2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd P2_f56,P2_f24,P2_f56 ! + 2-xT-x X3-2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis!>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 2.5 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<!
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmuld T2_f58,FP62_LN2LO,P2_f24 ! n*l2lo ! X3-2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmuld P2_f26,P2_f56,P2_f56 ! s*(POLY) ! X3-2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis!############################# AREA 3 (40#59) ###################################!
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis!>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 3.1 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<!
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd P2_f24,P2_f54,P2_f54 !n*l2lo,lylo ! X3-2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmuld P0_f6,P0_f6,P0_f34 ! z = s * s ! !X1
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis bge,pn %icc,.range2 ! ix<=0x000fffff or >=0x7ff00000 ! X3
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fpsub32s P2_X3,P2_f22,P2_X3 ! X - n -> x ! X3
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmuld T2_f58,FP60_LN2HI,T2_f58 ! n*l2hi ! X3-2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd P2_f56,P2_f54,P2_f56 ! + n*l2lo+lylo X3-2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis!>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 3.2 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<!
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fsubd FP40_TWO,P1_f14,P1_f14 ! two - xT ! X2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis srl %l2,10,%l2 ! j=(j>>11)&0x1f0 !ELEVENBIT ! X3
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fpadd32s P2_X3,CONST_f30,P2_f24 ! x round up X3
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd P2_f56,P2_f52,P2_f56 ! + (x-xT) X3-2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis!>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 3.3 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<!
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd P0_f36,FP38_A1,P0_f36 ! (s^2*A2), A1 X1
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fsubd P1_f14,P1_X2,P1_f14 ! (two - xT) - x ! !X2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis!>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 3.4 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<!
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmuld P0_f36,P0_f34,P0_f36 ! s^2*A2+A1 , s^2 X1
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fpadd32s P0_X1,TTOPMSK,P0_f2 ! X + TTOP ! X1-nextX
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd P2_f56,T2_f58,P2_f56 ! + n*l2hi X3-2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis!>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 3.5 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<!
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmuld T0_f8,FP62_LN2LO,P0_f4 ! n*l2lo ! X1
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis!BEST ld [%fp+tmp0],%l3 !BYPASS out ! X1-nextX
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis!############################# AREA 4 (OVERFLOW) ###################################!
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmuld P1_f16,P1_f16,P1_f44 ! z = s * s ! !X2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! FALL THROUGH if running out of X array here
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ! Once we get to the last element, we loop three more times to finish
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ! the computations in progress. This means we will load past the end
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ! of the argument vector, but since we use non-faulting loads and never
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ! use the data, the only potential problem is cache miss. (Strictly
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ! speaking, since we pad the argument vector with twos, we incorrectly
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ! raise inexact if the actual argument vector is all ones.)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis sethi %hi(0x40000000),%l0 ! "next argument" = two
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fpadd32s P0_X1,TTOPMSK,P0_f2 ! n=(ix+0xc0194000)&0xfff00000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis sethi %hi(0x40000000),%l1 ! "next argument" = two
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fpadd32s P1_X2,TTOPMSK,P1_f12 ! n=(ix+0xc0194000)&0xfff00000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis sethi %hi(0x40000000),%l2 ! "next argument" = two
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fpadd32s P2_X3,TTOPMSK,P2_f22 ! n=(ix+0xc0194000)&0xfff00000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis bgeu,pn %icc,2f ! if (unsigned) ix >= 0x7ff00000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fxtod P0_X1,P0_X1 ! scale by 2**1074 w/o trapping
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fpadd32s P0_X1,TTOPMSK,P0_f2 ! n = (ix + 0xc0194000) & 0xfff00000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fpsub32s P0_f2,CONSTE432_f29,P0_f2 ! n -= 0x43200000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fdivs CONSTE432_f29,P0_f1,P0_f2 ! raise div-by-zero
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fzero P0_f2 ! *y = (x < 0.0? 0.0 : x) * inf
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fpadd32s P0_X1,TTOPMSK,P0_f2 ! n=(ix+0xc0194000)&0xfff00000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis bgeu,pn %icc,2f ! if (unsigned) ix >= 0x7ff00000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fxtod P1_X2,P1_X2 ! scale by 2**1074 w/o trapping
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fpadd32s P1_X2,TTOPMSK,P1_f12 ! n = (ix + 0xc0194000) & 0xfff00000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fpsub32s P1_f12,CONSTE432_f29,P1_f12 ! n -= 0x43200000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fdivs CONSTE432_f29,P1_f11,P1_f12 ! raise div-by-zero
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fzero P1_f12 ! *y = (x < 0.0? 0.0 : x) * inf
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis bgeu,pn %icc,2f ! if (unsigned) ix >= 0x7ff00000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fxtod P2_X3,P2_X3 ! scale by 2**1074 w/o trapping
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fpadd32s P2_X3,TTOPMSK,P2_f22 ! n = (ix + 0xc0194000) & 0xfff00000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fpsub32s P2_f22,CONSTE432_f29,P2_f22 ! n -= 0x43200000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fdivs CONSTE432_f29,P2_f21,P2_f22 ! raise div-by-zero
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fzero P2_f22 ! *y = (x < 0.0? 0.0 : x) * inf