X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=device%2Flib%2F_fsget2args.c;h=e46738f72383b56ad3397ccb3803448a2e87d1cb;hb=1efca62b20292a5ee6595f5ccab4337f6b38a374;hp=3a9e9fe42fcc54cca4d610fd9a470d251cd75f60;hpb=081276d8f181c05fed4447d373d11d4940cbec2a;p=fw%2Fsdcc diff --git a/device/lib/_fsget2args.c b/device/lib/_fsget2args.c index 3a9e9fe4..e46738f7 100644 --- a/device/lib/_fsget2args.c +++ b/device/lib/_fsget2args.c @@ -1,14 +1,34 @@ +/* Floating point library in optimized assembly for 8051 + * Copyright (c) 2004, Paul Stoffregen, paul@pjrc.com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + + + #define SDCC_FLOAT_LIB #include +#ifdef FLOAT_ASM_MCS51 - -static void dummy(void) _naked +static void dummy(void) __naked { // arg1: passed in a,b,dph,dpl // arg2: passed on stack - _asm + __asm .globl fsgetargs fsgetargs: // extract the two inputs, placing them into: @@ -49,83 +69,7 @@ fsgetargs: mov exp_b, a mov r7, b ret - _endasm; -} - - - - - -#if 0 -// This old version was designed before the change to make all this -// code fully reentrant. What a mess the 2nd parameter turns out to -// be. - -void __fsgetargs (float a, float b) -{ - a; // passed in a,b,dph,dpl - b; // ___fsadd_PARM_2 - - _asm - // extract the two inputs, placing them into: - // sign exponent mantiassa - // ---- -------- --------- - // a: sign_a exp_a r4/r3/r2 - // b: sign_b exp_b r7/r6/r5 - // - mov r2, dpl - mov r3, dph - mov c, b.7 - rlc a - mov sign_a, c - jz 00001$ - setb b.7 -00001$: - mov exp_a, a - mov r4, b -#ifdef SDCC_MODEL_SMALL - mov r5, (___fsadd_PARM_2 + 0) - mov r6, (___fsadd_PARM_2 + 1) - mov b, (___fsadd_PARM_2 + 2) - mov a, (___fsadd_PARM_2 + 3) - mov c, b.7 - rlc a - mov sign_b, c - jz 00002$ - setb b.7 -00002$: - mov exp_b, a - mov r7, b -#endif - _endasm; + __endasm; } - -#ifdef SDCC_MODEL_LARGE -void __fsgetarglarge2 (void) -{ - _asm - movx a, @dptr - mov r5, a - inc dptr - movx a, @dptr - mov r6, a - inc dptr - movx a, @dptr - mov b, a - inc dptr - movx a, @dptr - mov c, b.7 - rlc a - mov sign_b, c - jz 00002$ - setb b.7 -00002$: - mov exp_b, a - mov r7, b - _endasm; -} #endif - -#endif -