/* libs/opengles/arch-mips/fixed_asm.S
**
** Copyright 2012, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
**     http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/


    .text
    .align

/*
 * this version rounds-to-nearest and saturates numbers
 * outside the range (but not NaNs).
 */

	.global	gglFloatToFixed
	.ent	gglFloatToFixed
	.type	gglFloatToFixed, @function
gglFloatToFixed:
#if !defined(__mips_soft_float)
	mfc1	$a0,$f12
#endif
	srl	$t0,$a0,31		/* t0 <- sign bit */
	srl	$t1,$a0,23
	andi	$t1,$t1,0xff		/* get the e */
	li	$t2,0x8e
	subu	$t1,$t2,$t1		/* t1=127+15-e */
	blez	$t1,0f			/* t1<=0? */
	sll	$t2,$a0,8		/* mantissa<<8 */
	lui	$t3,0x8000
	or	$t2,$t2,$t3		/* add the missing 1 */
	subu	$t1,$t1,1
	srl	$v0,$t2,$t1
	sltiu	$t3,$t1,32		/* t3=1 if t1<32, else t3=0. t1>=32 means the float value is too small. */
	andi	$t4,$v0,0x1
	srl	$v0,$v0,1		/* scale to 16.16 */
	addu	$v0,$v0,$t4		/* round-to-nearest */
	subu	$t2,$zero,$v0
	movn	$v0,$t2,$t0		/* if negative? */
	or	$t1,$a0,$zero		/* a0=0? */
	movz	$v0,$zero,$t1
	movz	$v0,$zero,$t3		/* t3=0 then res=0 */
	jr	$ra
0:
	lui	$t1,0x8000
	and	$v0,$a0,$t1		/* keep only the sign bit */
	li	$t1,0x7fffffff
	movz	$v0,$t1,$t0		/* positive, maximum value */
	jr	$ra
	.end	gglFloatToFixed
