From f243673d6931745cc2a79b9a2f100c92198c39cf Mon Sep 17 00:00:00 2001 From: CSRG Date: Thu, 30 Jun 1983 01:29:01 -0800 Subject: [PATCH 1/1] BSD 4_2 development Work on file usr/src/lib/libc/vax/gen/atof.s Work on file usr/src/lib/libc/vax/gen/nargs.s Work on file usr/src/lib/libc/vax/gen/abs.s Synthesized-from: CSRG/cd1/4.2 --- usr/src/lib/libc/vax/gen/abs.s | 12 ++ usr/src/lib/libc/vax/gen/atof.s | 326 +++++++++++++++++++++++++++++++ usr/src/lib/libc/vax/gen/nargs.s | 8 + 3 files changed, 346 insertions(+) create mode 100644 usr/src/lib/libc/vax/gen/abs.s create mode 100644 usr/src/lib/libc/vax/gen/atof.s create mode 100644 usr/src/lib/libc/vax/gen/nargs.s diff --git a/usr/src/lib/libc/vax/gen/abs.s b/usr/src/lib/libc/vax/gen/abs.s new file mode 100644 index 0000000000..c5be8045e3 --- /dev/null +++ b/usr/src/lib/libc/vax/gen/abs.s @@ -0,0 +1,12 @@ +/* abs.s 4.1 83/06/27 */ + +/* abs - int absolute value */ + +#include "DEFS.h" + +ENTRY(abs) + movl 4(ap),r0 + bgeq 1f + mnegl r0,r0 +1: + ret diff --git a/usr/src/lib/libc/vax/gen/atof.s b/usr/src/lib/libc/vax/gen/atof.s new file mode 100644 index 0000000000..3860c1de0b --- /dev/null +++ b/usr/src/lib/libc/vax/gen/atof.s @@ -0,0 +1,326 @@ +/* atof.s 4.2 83/06/30 */ + +#include "DEFS.h" + +/* + * atof: convert ascii to floating + * + * C usage: + * + * double atof (s) + * char *s; + * + * Register usage: + * + * r0-1: value being developed + * r2: first section: pointer to the next character + * second section: binary exponent + * r3: flags + * r4: first section: the current character + * second section: scratch + * r5: the decimal exponent + * r6-7: scratch + * + * Flag definitions + */ + .set msign,0 # mantissa has negative sign + .set esign,1 # exponent has negative sign + .set decpt,2 # decimal point encountered + + .align 2 +two31: .word 0x5000 # 2 ** 31 + .word 0 # (=2147483648) + .word 0 # in floating-point + .word 0 # (so atof doesn't have to convert it) +/* + * Entry point + */ +ENTRY(atof) + pushl r6 + pushl r7 +/* + * Initialization + */ + clrl r3 # All flags start out false + movl 4(ap),r2 # Address the first character + clrl r5 # Clear starting exponent +/* + * Skip leading white space + */ +sk0: movzbl (r2)+,r4 # Fetch the next (first) character + cmpb $' ,r4 # Is it blank? + jeql sk0 # ...yes + cmpb r4,$8 # 8 is lowest of white-space group + jlss sk1 # Jump if char too low to be white space + cmpb r4,$13 # 13 is highest of white-space group + jleq sk0 # Jump if character is white space +sk1: +/* + * Check for a sign + */ + cmpb $'+,r4 # Positive sign? + jeql cs1 # ... yes + cmpb $'-,r4 # Negative sign? + jneq cs2 # ... no + bisb2 $1