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