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 * 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 .file "__vlog.S"
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#include "libm.h"
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis RO_DATA
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .align 32
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr JasiukajtisTBL:
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0xbfd522ae, 0x0738a000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0xbd2ebe70, 0x8164c759
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0xbfd3c252, 0x77333000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0xbd183b54, 0xb606bd5c
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0xbfd26962, 0x1134e000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x3d31b61f, 0x10522625
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0xbfd1178e, 0x8227e000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0xbd31ef78, 0xce2d07f2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0xbfcf991c, 0x6cb3c000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x3d390d04, 0xcd7cc834
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0xbfcd1037, 0xf2656000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x3d084a7e, 0x75b6f6e4
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0xbfca93ed, 0x3c8ae000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x3d287243, 0x50562169
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0xbfc823c1, 0x6551a000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0xbd1e0ddb, 0x9a631e83
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0xbfc5bf40, 0x6b544000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x3d127023, 0xeb68981c
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0xbfc365fc, 0xb015a000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x3d3fd3a0, 0xafb9691b
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0xbfc1178e, 0x8227e000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0xbd21ef78, 0xce2d07f2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0xbfbda727, 0x63844000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0xbd1a8940, 0x1fa71733
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0xbfb9335e, 0x5d594000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0xbd23115c, 0x3abd47da
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0xbfb4d311, 0x5d208000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x3cf53a25, 0x82f4e1ef
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0xbfb08598, 0xb59e4000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x3d17e5dd, 0x7009902c
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0xbfa894aa, 0x149f8000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0xbd39a19a, 0x8be97661
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0xbfa0415d, 0x89e78000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x3d3dddc7, 0xf461c516
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0xbf902056, 0x58930000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0xbd3611d2, 0x7c8e8417
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x00000000, 0x00000000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x00000000, 0x00000000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x3f9f829b, 0x0e780000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x3d298026, 0x7c7e09e4
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x3faf0a30, 0xc0110000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x3d48a998, 0x5f325c5c
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x3fb6f0d2, 0x8ae58000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0xbd34b464, 0x1b664613
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x3fbe2707, 0x6e2b0000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0xbd2a342c, 0x2af0003c
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x3fc29552, 0xf8200000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0xbd35b967, 0xf4471dfc
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x3fc5ff30, 0x70a78000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x3d43d3c8, 0x73e20a07
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x3fc9525a, 0x9cf44000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x3d46b476, 0x41307539
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x3fcc8ff7, 0xc79a8000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x3d4a21ac, 0x25d81ef3
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x3fcfb918, 0x6d5e4000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0xbd0d572a, 0xab993c87
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x3fd1675c, 0xababa000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x3d38380e, 0x731f55c4
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x3fd2e8e2, 0xbae12000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0xbd267b1e, 0x99b72bd8
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x3fd4618b, 0xc21c6000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0xbd13d82f, 0x484c84cc
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x3fd5d1bd, 0xbf580000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x3d4394a1, 0x1b1c1ee4
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! constants:
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x40000000,0x00000000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x3fe55555,0x555571da
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x3fd99999,0x8702be3a
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x3fd24af7,0x3f4569b1
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x3ea62e42,0xfee00000 ! scaled by 2**-20
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x3caa39ef,0x35793c76 ! scaled by 2**-20
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0xffff8000,0x00000000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x43200000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0xfff00000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0xc0194000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .word 0x4000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#define two 0x200
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#define A1 0x208
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#define A2 0x210
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#define A3 0x218
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#define ln2hi 0x220
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#define ln2lo 0x228
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#define mask 0x230
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#define ox43200000 0x238
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#define oxfff00000 0x23c
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#define oxc0194000 0x240
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#define ox4000 0x244
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! local storage indices
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#define jnk STACK_BIAS-0x8
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#define tmp2 STACK_BIAS-0x10
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#define tmp1 STACK_BIAS-0x18
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#define tmp0 STACK_BIAS-0x20
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! sizeof temp storage - must be a multiple of 16 for V9
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#define tmps 0x20
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! register use
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! i0 n
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! i1 x
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! i2 stridex
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! i3 y
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! i4 stridey
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! i5
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! g1 TBL
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! l0 j0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! l1 j1
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! l2 j2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! l3
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! l4 0x94000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! l5
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! l6 0x000fffff
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! l7 0x7ff00000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! o0 py0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! o1 py1
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! o2 py2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! o3
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! o4
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! o5
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! o7
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! f0 u0,q0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! f2 v0,(two-v0)-u0,z0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! f4 n0,f0,q0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! f6 s0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! f8 q
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! f10 u1,q1
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! f12 v1,(two-v1)-u1,z1
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! f14 n1,f1,q1
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! f16 s1
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! f18 t
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! f20 u2,q2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! f22 v2,(two-v2)-u2,q2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! f24 n2,f2,q2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! f26 s2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! f28 0xfff00000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! f29 0x43200000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! f30 0x4000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! f31 0xc0194000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! f32 t0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! f34 h0,f0-(c0-h0)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! f36 c0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! f38 A1
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! f40 two
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! f42 t1
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! f44 h1,f1-(c1-h1)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! f46 c1
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! f48 A2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! f50 0xffff8000...
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! f52 t2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! f54 h2,f2-(c2-h2)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! f56 c2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! f58 A3
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! f60 ln2hi
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! f62 ln2lo
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ENTRY(__vlog)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis save %sp,-SA(MINFRAME)-tmps,%sp
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis PIC_SETUP(l7)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis PIC_SET(l7,TBL,o0)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis mov %o0,%g1
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis wr %g0,0x82,%asi ! set %asi for non-faulting loads
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis sethi %hi(0x94000),%l4
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis sethi %hi(0x000fffff),%l6
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis or %l6,%lo(0x000fffff),%l6
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis sethi %hi(0x7ff00000),%l7
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ldd [%g1+two],%f40
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ldd [%g1+A1],%f38
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ldd [%g1+A2],%f48
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ldd [%g1+A3],%f58
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ldd [%g1+ln2hi],%f60
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ldd [%g1+ln2lo],%f62
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ldd [%g1+mask],%f50
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ld [%g1+ox43200000],%f29
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ld [%g1+oxfff00000],%f28
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ld [%g1+oxc0194000],%f31
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ld [%g1+ox4000],%f30
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis sll %i2,3,%i2 ! scale strides
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis sll %i4,3,%i4
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis add %fp,jnk,%o0 ! precondition loop
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis add %fp,jnk,%o1
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis add %fp,jnk,%o2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fzero %f2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fzero %f6
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fzero %f18
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fzero %f36
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fzero %f12
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fzero %f14
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fzero %f16
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fzero %f42
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fzero %f44
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fzero %f46
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis std %f46,[%fp+tmp1]
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fzero %f24
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fzero %f26
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fzero %f52
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fzero %f54
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis std %f54,[%fp+tmp2]
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis sub %i3,%i4,%i3
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ld [%i1],%l0 ! ix
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ld [%i1],%f0 ! u.l[0] = *x
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ba .loop0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ld [%i1+4],%f1 ! u.l[1] = *(1+x)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .align 16
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! -- 16 byte aligned
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis.loop0:
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis sub %l0,%l7,%o3
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis sub %l6,%l0,%o4
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fpadd32s %f0,%f31,%f4 ! n = (ix + 0xc0194000) & 0xfff00000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmuld %f6,%f2,%f8 ! (previous iteration)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis andcc %o3,%o4,%o4
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis bge,pn %icc,.range0 ! ix <= 0x000fffff or >= 0x7ff00000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! delay slot
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fands %f4,%f28,%f4
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis add %i1,%i2,%i1 ! x += stridex
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis add %i3,%i4,%i3 ! y += stridey
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fpsub32s %f0,%f4,%f0 ! u.l[0] -= n
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis.cont0:
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis lda [%i1]%asi,%l1 ! preload next argument
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis add %l0,%l4,%l0 ! j = ix + 0x94000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fpadd32s %f0,%f30,%f2 ! v.l[0] = u.l[0] + 0x4000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis lda [%i1]%asi,%f10
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis srl %l0,11,%l0 ! j = (j >> 11) & 0x1f0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fand %f2,%f50,%f2 ! v.l &= 0xffff8000...
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis lda [%i1+4]%asi,%f11
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis and %l0,0x1f0,%l0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fitod %f4,%f32 ! (double) n
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis add %l0,8,%l3
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fsubd %f0,%f2,%f4 ! f = u.d - v.d
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd %f0,%f2,%f6 ! s = f / (u.d + v.d)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fsubd %f40,%f2,%f2 ! two - v.d
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmuld %f32,%f60,%f34 ! h = n * ln2hi + TBL[j]
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd %f8,%f18,%f8 ! y = c + (t + q)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmuld %f32,%f62,%f32 ! t = n * ln2lo + TBL[j+1]
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fdivd %f4,%f6,%f6
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd %f54,%f24,%f56 ! c = h + f
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmuld %f26,%f26,%f22 ! z = s * s
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd %f8,%f36,%f8
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis st %f8,[%o0]
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis st %f9,[%o0+4]
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis mov %i3,%o0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd %f14,%f38,%f14
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fsubd %f56,%f54,%f54 ! t += f - (c - h)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmuld %f22,%f58,%f20 ! q = ...
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fsubd %f2,%f0,%f2 ! (two - v.d) - u.d
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ldd [%g1+%l0],%f36
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd %f42,%f44,%f18
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmuld %f12,%f14,%f14
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ldd [%fp+tmp1],%f12
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd %f20,%f48,%f20
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis nop
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd %f34,%f36,%f34
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ldd [%g1+%l3],%f0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd %f14,%f12,%f12
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fsubd %f24,%f54,%f54
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmuld %f22,%f20,%f24
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis std %f2,[%fp+tmp0]
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis addcc %i0,-1,%i0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ble,pn %icc,.endloop0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! delay slot
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd %f32,%f0,%f32
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! -- 16 byte aligned
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis.loop1:
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis sub %l1,%l7,%o3
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis sub %l6,%l1,%o4
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fpadd32s %f10,%f31,%f14 ! n = (ix + 0xc0194000) & 0xfff00000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmuld %f16,%f12,%f8 ! (previous iteration)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis andcc %o3,%o4,%o4
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis bge,pn %icc,.range1 ! ix <= 0x000fffff or >= 0x7ff00000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! delay slot
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fands %f14,%f28,%f14
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis add %i1,%i2,%i1 ! x += stridex
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis add %i3,%i4,%i3 ! y += stridey
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fpsub32s %f10,%f14,%f10 ! u.l[0] -= n
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis.cont1:
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis lda [%i1]%asi,%l2 ! preload next argument
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis add %l1,%l4,%l1 ! j = ix + 0x94000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fpadd32s %f10,%f30,%f12 ! v.l[0] = u.l[0] + 0x4000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis lda [%i1]%asi,%f20
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis srl %l1,11,%l1 ! j = (j >> 11) & 0x1f0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fand %f12,%f50,%f12 ! v.l &= 0xffff8000...
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis lda [%i1+4]%asi,%f21
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis and %l1,0x1f0,%l1
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fitod %f14,%f42 ! (double) n
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis add %l1,8,%l3
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fsubd %f10,%f12,%f14 ! f = u.d - v.d
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd %f10,%f12,%f16 ! s = f / (u.d + v.d)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fsubd %f40,%f12,%f12 ! two - v.d
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmuld %f42,%f60,%f44 ! h = n * ln2hi + TBL[j]
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd %f8,%f18,%f8 ! y = c + (t + q)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmuld %f42,%f62,%f42 ! t = n * ln2lo + TBL[j+1]
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fdivd %f14,%f16,%f16
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd %f34,%f4,%f36 ! c = h + f
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmuld %f6,%f6,%f2 ! z = s * s
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd %f8,%f46,%f8
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis st %f8,[%o1]
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis st %f9,[%o1+4]
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis mov %i3,%o1
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd %f24,%f38,%f24
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fsubd %f36,%f34,%f34 ! t += f - (c - h)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmuld %f2,%f58,%f0 ! q = ...
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fsubd %f12,%f10,%f12 ! (two - v.d) - u.d
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ldd [%g1+%l1],%f46
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd %f52,%f54,%f18
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmuld %f22,%f24,%f24
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ldd [%fp+tmp2],%f22
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd %f0,%f48,%f0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis nop
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd %f44,%f46,%f44
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ldd [%g1+%l3],%f10
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd %f24,%f22,%f22
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fsubd %f4,%f34,%f34
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmuld %f2,%f0,%f4
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis std %f12,[%fp+tmp1]
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis addcc %i0,-1,%i0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ble,pn %icc,.endloop1
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! delay slot
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd %f42,%f10,%f42
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! -- 16 byte aligned
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis.loop2:
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis sub %l2,%l7,%o3
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis sub %l6,%l2,%o4
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fpadd32s %f20,%f31,%f24 ! n = (ix + 0xc0194000) & 0xfff00000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmuld %f26,%f22,%f8 ! (previous iteration)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis andcc %o3,%o4,%o4
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis bge,pn %icc,.range2 ! ix <= 0x000fffff or >= 0x7ff00000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! delay slot
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fands %f24,%f28,%f24
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis add %i1,%i2,%i1 ! x += stridex
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis add %i3,%i4,%i3 ! y += stridey
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fpsub32s %f20,%f24,%f20 ! u.l[0] -= n
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis.cont2:
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis lda [%i1]%asi,%l0 ! preload next argument
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis add %l2,%l4,%l2 ! j = ix + 0x94000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fpadd32s %f20,%f30,%f22 ! v.l[0] = u.l[0] + 0x4000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis lda [%i1]%asi,%f0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis srl %l2,11,%l2 ! j = (j >> 11) & 0x1f0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fand %f22,%f50,%f22 ! v.l &= 0xffff8000...
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis lda [%i1+4]%asi,%f1
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis and %l2,0x1f0,%l2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fitod %f24,%f52 ! (double) n
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis add %l2,8,%l3
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fsubd %f20,%f22,%f24 ! f = u.d - v.d
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd %f20,%f22,%f26 ! s = f / (u.d + v.d)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fsubd %f40,%f22,%f22 ! two - v.d
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmuld %f52,%f60,%f54 ! h = n * ln2hi + TBL[j]
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd %f8,%f18,%f8 ! y = c + (t + q)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmuld %f52,%f62,%f52 ! t = n * ln2lo + TBL[j+1]
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fdivd %f24,%f26,%f26
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd %f44,%f14,%f46 ! c = h + f
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmuld %f16,%f16,%f12 ! z = s * s
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd %f8,%f56,%f8
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis st %f8,[%o2]
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis st %f9,[%o2+4]
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis mov %i3,%o2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd %f4,%f38,%f4
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fsubd %f46,%f44,%f44 ! t += f - (c - h)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmuld %f12,%f58,%f10 ! q = ...
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fsubd %f22,%f20,%f22 ! (two - v.d) - u.d
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ldd [%g1+%l2],%f56
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd %f32,%f34,%f18
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmuld %f2,%f4,%f4
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ldd [%fp+tmp0],%f2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd %f10,%f48,%f10
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis nop
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd %f54,%f56,%f54
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ldd [%g1+%l3],%f20
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd %f4,%f2,%f2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fsubd %f14,%f44,%f44
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmuld %f12,%f10,%f14
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis std %f22,[%fp+tmp2]
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis addcc %i0,-1,%i0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis bg,pt %icc,.loop0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! delay slot
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd %f52,%f20,%f52
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
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. (Note that
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! when the argument is 2, the only exception that occurs in the compu-
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! tation is an inexact result in the final addition, and we break out
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! of the "extra" iterations before then.)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis.endloop2:
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis sethi %hi(0x40000000),%l0 ! "next argument" = two
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis cmp %i0,-3
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis bg,a,pt %icc,.loop0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! delay slot
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmovd %f40,%f0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ret
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis restore
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .align 16
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis.endloop0:
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis sethi %hi(0x40000000),%l1 ! "next argument" = two
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis cmp %i0,-3
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis bg,a,pt %icc,.loop1
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! delay slot
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmovd %f40,%f10
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ret
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis restore
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .align 16
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis.endloop1:
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis sethi %hi(0x40000000),%l2 ! "next argument" = two
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis cmp %i0,-3
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis bg,a,pt %icc,.loop2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! delay slot
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmovd %f40,%f20
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ret
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis restore
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .align 16
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis.range0:
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis cmp %l0,%l7
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis bgeu,pn %icc,2f ! if (unsigned) ix >= 0x7ff00000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! delay slot
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ld [%i1+4],%o5
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fxtod %f0,%f0 ! scale by 2**1074 w/o trapping
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis st %f0,[%fp+tmp0]
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis add %i1,%i2,%i1 ! x += stridex
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis orcc %l0,%o5,%g0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis be,pn %icc,1f ! if x == 0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! delay slot
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis add %i3,%i4,%i3 ! y += stridey
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fpadd32s %f0,%f31,%f4 ! n = (ix + 0xc0194000) & 0xfff00000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fands %f4,%f28,%f4
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fpsub32s %f0,%f4,%f0 ! u.l[0] -= n
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ld [%fp+tmp0],%l0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ba,pt %icc,.cont0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! delay slot
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fpsub32s %f4,%f29,%f4 ! n -= 0x43200000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis1:
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fdivs %f29,%f1,%f4 ! raise div-by-zero
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ba,pt %icc,3f
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! delay slot
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis st %f28,[%i3] ! store -inf
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis2:
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis sll %l0,1,%l0 ! lop off sign bit
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis add %i1,%i2,%i1 ! x += stridex
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis orcc %l0,%o5,%g0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis be,pn %icc,1b ! if x == -0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! delay slot
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis add %i3,%i4,%i3 ! y += stridey
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fabsd %f0,%f4 ! *y = (x + |x|) * inf
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd %f0,%f4,%f0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fand %f28,%f50,%f4
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fnegd %f4,%f4
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmuld %f0,%f4,%f0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis st %f0,[%i3]
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis3:
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis addcc %i0,-1,%i0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ble,pn %icc,.endloop2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! delay slot
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis st %f1,[%i3+4]
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ld [%i1],%l0 ! get next argument
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ld [%i1],%f0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ba,pt %icc,.loop0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! delay slot
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ld [%i1+4],%f1
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .align 16
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis.range1:
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis cmp %l1,%l7
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis bgeu,pn %icc,2f ! if (unsigned) ix >= 0x7ff00000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! delay slot
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ld [%i1+4],%o5
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fxtod %f10,%f10 ! scale by 2**1074 w/o trapping
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis st %f10,[%fp+tmp1]
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis add %i1,%i2,%i1 ! x += stridex
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis orcc %l1,%o5,%g0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis be,pn %icc,1f ! if x == 0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! delay slot
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis add %i3,%i4,%i3 ! y += stridey
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fpadd32s %f10,%f31,%f14 ! n = (ix + 0xc0194000) & 0xfff00000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fands %f14,%f28,%f14
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fpsub32s %f10,%f14,%f10 ! u.l[0] -= n
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ld [%fp+tmp1],%l1
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ba,pt %icc,.cont1
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! delay slot
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fpsub32s %f14,%f29,%f14 ! n -= 0x43200000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis1:
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fdivs %f29,%f11,%f14 ! raise div-by-zero
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ba,pt %icc,3f
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! delay slot
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis st %f28,[%i3] ! store -inf
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis2:
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis sll %l1,1,%l1 ! lop off sign bit
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis add %i1,%i2,%i1 ! x += stridex
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis orcc %l1,%o5,%g0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis be,pn %icc,1b ! if x == -0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! delay slot
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis add %i3,%i4,%i3 ! y += stridey
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fabsd %f10,%f14 ! *y = (x + |x|) * inf
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd %f10,%f14,%f10
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fand %f28,%f50,%f14
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fnegd %f14,%f14
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmuld %f10,%f14,%f10
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis st %f10,[%i3]
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis3:
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis addcc %i0,-1,%i0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ble,pn %icc,.endloop0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! delay slot
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis st %f11,[%i3+4]
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ld [%i1],%l1 ! get next argument
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ld [%i1],%f10
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ba,pt %icc,.loop1
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! delay slot
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ld [%i1+4],%f11
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis .align 16
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis.range2:
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis cmp %l2,%l7
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis bgeu,pn %icc,2f ! if (unsigned) ix >= 0x7ff00000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! delay slot
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ld [%i1+4],%o5
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fxtod %f20,%f20 ! scale by 2**1074 w/o trapping
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis st %f20,[%fp+tmp2]
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis add %i1,%i2,%i1 ! x += stridex
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis orcc %l2,%o5,%g0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis be,pn %icc,1f ! if x == 0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! delay slot
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis add %i3,%i4,%i3 ! y += stridey
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fpadd32s %f20,%f31,%f24 ! n = (ix + 0xc0194000) & 0xfff00000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fands %f24,%f28,%f24
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fpsub32s %f20,%f24,%f20 ! u.l[0] -= n
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ld [%fp+tmp2],%l2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ba,pt %icc,.cont2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! delay slot
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fpsub32s %f24,%f29,%f24 ! n -= 0x43200000
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis1:
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fdivs %f29,%f21,%f24 ! raise div-by-zero
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ba,pt %icc,3f
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! delay slot
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis st %f28,[%i3] ! store -inf
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis2:
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis sll %l2,1,%l2 ! lop off sign bit
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis add %i1,%i2,%i1 ! x += stridex
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis orcc %l2,%o5,%g0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis be,pn %icc,1b ! if x == -0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! delay slot
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis add %i3,%i4,%i3 ! y += stridey
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fabsd %f20,%f24 ! *y = (x + |x|) * inf
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis faddd %f20,%f24,%f20
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fand %f28,%f50,%f24
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fnegd %f24,%f24
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fmuld %f20,%f24,%f20
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis st %f20,[%i3]
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis3:
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis addcc %i0,-1,%i0
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ble,pn %icc,.endloop1
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! delay slot
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis st %f21,[%i3+4]
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ld [%i1],%l2 ! get next argument
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ld [%i1],%f20
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ba,pt %icc,.loop2
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis! delay slot
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ld [%i1+4],%f21
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis SET_SIZE(__vlog)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis