- else
- if (sl_class == N_RSYM)
- putreg(addr,typetodesc(sl_type,subflag)[0],argvalue(args));
+ else {
+ if (number(args[0]) || eqany(args[0], ".-")) {
+ char *p;
+ double atof();
+ union {
+ struct{
+ int w1, w2;
+ } ww;
+ double d;
+ } dbl;
+
+ p = (args[0] == '-') ? args+1 : args;
+ for (; *p != '.' && *p != 'e'; p++) {
+ if (!number(*p)) goto l2;
+ }
+ dbl.d = atof(args);
+ putval(addr, 'd', dbl.ww.w1);
+ if (typetodesc(sl_type,0)[0] == 'g')
+ putval(addr+WORDSIZE, 'd', dbl.ww.w2);
+ break;
+ }
+l2: if (percentflag)
+ *(ADDR *)(((ADDR)&u)+addr) = argvalue(args);
+ else if (sl_class == N_RSYM && addr < 16)
+ putreg(addr,typetodesc(sl_type,subflag)[0],
+ argvalue(args));