Home | History | Annotate | Line # | Download | only in ieee-754
      1  1.1.1.10  mrg /* Copyright (C) 2006-2024 Free Software Foundation, Inc.
      2       1.1  mrg    Contributor: Joern Rennecke <joern.rennecke (at) embecosm.com>
      3       1.1  mrg 		on behalf of Synopsys Inc.
      4       1.1  mrg 
      5       1.1  mrg This file is part of GCC.
      6       1.1  mrg 
      7       1.1  mrg GCC is free software; you can redistribute it and/or modify it under
      8       1.1  mrg the terms of the GNU General Public License as published by the Free
      9       1.1  mrg Software Foundation; either version 3, or (at your option) any later
     10       1.1  mrg version.
     11       1.1  mrg 
     12       1.1  mrg GCC is distributed in the hope that it will be useful, but WITHOUT ANY
     13       1.1  mrg WARRANTY; without even the implied warranty of MERCHANTABILITY or
     14       1.1  mrg FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
     15       1.1  mrg for more details.
     16       1.1  mrg 
     17       1.1  mrg Under Section 7 of GPL version 3, you are granted additional
     18       1.1  mrg permissions described in the GCC Runtime Library Exception, version
     19       1.1  mrg 3.1, as published by the Free Software Foundation.
     20       1.1  mrg 
     21       1.1  mrg You should have received a copy of the GNU General Public License and
     22       1.1  mrg a copy of the GCC Runtime Library Exception along with this program;
     23       1.1  mrg see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
     24       1.1  mrg <http://www.gnu.org/licenses/>.  */
     25       1.1  mrg 
     26       1.1  mrg #include "arc-ieee-754.h"
     27       1.1  mrg 
     28       1.1  mrg #if 0 /* DEBUG */
     29       1.1  mrg 	.global __extendsfdf2
     30       1.1  mrg 	.balign 4
     31       1.1  mrg 	FUNC(__extendsfdf2)
     32       1.1  mrg __extendsfdf2:
     33       1.1  mrg 	push_s blink
     34       1.1  mrg 	bl.d __extendsfdf2_c
     35       1.1  mrg 	push_s r0
     36       1.1  mrg 	ld_s r2,[sp]
     37       1.1  mrg 	st_s r1,[sp]
     38       1.1  mrg 	push_s r0
     39       1.1  mrg 	bl.d __extendsfdf2_asm
     40       1.1  mrg 	mov_s r0,r2
     41       1.1  mrg 	pop_s r2
     42       1.1  mrg 	pop_s r3
     43       1.1  mrg 	pop_s blink
     44       1.1  mrg 	cmp r0,r2
     45       1.1  mrg 	cmp.eq r1,r3
     46       1.1  mrg 	jeq_s [blink]
     47       1.1  mrg 	bl abort
     48       1.1  mrg 	ENDFUNC(__extendsfdf2)
     49       1.1  mrg #define __extendsfdf2 __extendsfdf2_asm
     50       1.1  mrg #endif /* DEBUG */
     51       1.1  mrg #if 0 /* ARC600 */
     52       1.1  mrg __extendsfdf2:
     53       1.1  mrg 	lsr r2,r0,23
     54       1.1  mrg 	tst r2,0xff
     55       1.1  mrg 	bic.ne.f r2,0xff
     56       1.1  mrg 	beq_s .Linf_nan_denorm_0
     57       1.1  mrg ..
     58       1.1  mrg .Linf_nan_denorm:
     59       1.1  mrg 	bbit1 r0,30,.Linf_nan
     60       1.1  mrg #endif
     61       1.1  mrg 	.global __extendsfdf2
     62       1.1  mrg 	.balign 4
     63       1.1  mrg 	FUNC(__extendsfdf2)
     64       1.1  mrg __extendsfdf2:
     65       1.1  mrg 	add.f r1,r0,r0
     66       1.1  mrg 	norm r3,r1
     67       1.1  mrg #ifdef __LITTLE_ENDIAN__
     68       1.1  mrg 	lsr_s DBL0H,r1,4
     69       1.1  mrg 	brhs r3,7,.Linf_nan_denorm_0
     70       1.1  mrg 	asl_s DBL0L,r0,29
     71       1.1  mrg 	add_s DBL0H,DBL0H, \
     72       1.1  mrg 		0x38000000
     73       1.1  mrg #else
     74       1.1  mrg 	lsr r2,r1,4
     75       1.1  mrg 	brhs r3,7,.Linf_nan_denorm_0
     76       1.1  mrg 	asl_s DBL0L,r1,28
     77       1.1  mrg 	add DBL0H,r2, \
     78       1.1  mrg 		0x38000000
     79       1.1  mrg #endif
     80       1.1  mrg 	j_s.d [blink]
     81       1.1  mrg 	bxor.cs DBL0H,DBL0H,31
     82       1.1  mrg 	.balign 4
     83       1.1  mrg .Linf_nan_denorm_0:
     84       1.1  mrg #ifdef __LITTLE_ENDIAN__
     85       1.1  mrg 	mov_s DBL0H,r0
     86       1.1  mrg 	jeq.d [blink]
     87       1.1  mrg 	mov.eq DBL0L,0
     88       1.1  mrg #else
     89       1.1  mrg 	jeq_s [blink]
     90       1.1  mrg #endif
     91       1.1  mrg 	bmi .Linf_nan
     92       1.1  mrg 	asl_s r0,r0,r3
     93       1.1  mrg 	rsub r3,r3,0x380+6
     94       1.1  mrg #ifdef __LITTLE_ENDIAN__
     95       1.1  mrg 	asl_s r3,r3,20
     96       1.1  mrg 	lsr DBL0H,r0,9
     97       1.1  mrg 	asl_s DBL0L,r0,23
     98       1.1  mrg 	add_s DBL0H,DBL0H,r3
     99       1.1  mrg 	j_s.d [blink]
    100       1.1  mrg 	bxor.cs DBL0H,DBL0H,31
    101       1.1  mrg #else
    102       1.1  mrg 	asl DBL0L,r0,23
    103       1.1  mrg 	lsr_s DBL0H,r0,9
    104       1.1  mrg 	asl_s r3,r3,20
    105       1.1  mrg 	bxor.cs DBL0H,DBL0H,31
    106       1.1  mrg 	j_s.d [blink]
    107       1.1  mrg 	add_l DBL0H,DBL0H,r3
    108       1.1  mrg #endif
    109       1.1  mrg .Linf_nan:
    110       1.1  mrg #ifdef __LITTLE_ENDIAN__
    111       1.1  mrg 	lsr DBL0H,r0,3
    112       1.1  mrg 
    113       1.1  mrg 	or_s DBL0H,DBL0H,r0
    114       1.1  mrg 	j_s.d [blink]
    115       1.1  mrg 	mov_l DBL0L,0
    116       1.1  mrg #else
    117       1.1  mrg 	lsr r3,r0,3
    118       1.1  mrg 	mov_s DBL0L,0
    119       1.1  mrg 	j_s.d [blink]
    120       1.1  mrg 	or_l DBL0H,r0,r3
    121       1.1  mrg #endif
    122       1.1  mrg 	ENDFUNC(__extendsfdf2)
    123