int BtoR(long b) { b &= 0x001fffffL; if(b == 0) return 0; return bitno(b) + REGMIN; }
int BtoR(long b) { b &= 0x01fcL; // excluded R9 and R10 for extern registers if(b == 0) return 0; return bitno(b); }
int BtoR(int32 b) { b &= 0xffffL; if(b == 0) return 0; return bitno(b) + D_AX; }
int BtoR(int32 b) { b &= 0x3fffL; // no R14 or R15 if(b == 0) return 0; return bitno(b) + D_AX; }
int BtoR(int32 b) { b &= 0x11fcL; // excluded R9 and R10 for m and g, but not R12 if(b == 0) return 0; return bitno(b); }
BtoR(long b) { b &= 0x001fffffL; if(b == 0) return 0; return bitno(b) + 3; }
int BtoF(long b) { b &= 0xfc0000L; if(b == 0) return 0; return bitno(b) - 16; }
int BtoF(int32 b) { b &= 0xfffc0000L; if(b == 0) return 0; return bitno(b) - 16; }
int BtoF(int32_t b) { b &= 0xffc00000L; if(b == 0) return 0; return bitno(b)*2 - 40; }
int BtoF(long b) { b &= 0xffc00000L; if(b == 0) return 0; return bitno(b)*2 - 40; }
int BtoF(int32 b) { b &= 0xFFFF0000L; if(b == 0) return 0; return bitno(b) - 16 + D_X0; }
int BtoF(int32 b) { b &= 0x70000L; if(b == 0) return 0; return bitno(b) - 16 + FREGMIN; }
int BtoR(long b) { b &= 0xffL; if(b == 0) return 0; return bitno(b) + D_AX; }
int BtoF(long b) { b &= 0xffc00000L; if(b == 0) return 0; return bitno(b) - 22 + FREGMIN; }
int BtoR(int32 b) { b &= 0xffffL; if(nacl) b &= ~((1<<(D_BP-D_AX)) | (1<<(D_R15-D_AX))); if(b == 0) return 0; return bitno(b) + D_AX; }
int bnum(Bits a) { int i; long b; for(i=0; i<BITS; i++) if(b = a.b[i]) return 32*i + bitno(b); diag(Z, "bad in bnum"); return 0; }
int bnum(Bits a) { int i; int32 b; for(i=0; i<BITS; i++) if(b = a.b[i]) return 32*i + bitno(b); fatal("bad in bnum"); return 0; }
int BtoR(long b) { int r; b &= 0x001fffffL; if(b == 0) return 0; r = bitno(b) + 9; if(r >= 14) r += 2; return r; }
uint32 allreg(uint32 b, Rgn *r) { Var *v; int i; v = var + r->varno; r->regno = 0; switch(v->etype) { default: fatal("unknown etype %d/%E", bitno(b), v->etype); break; case TINT8: case TUINT8: case TINT16: case TUINT16: case TINT32: case TUINT32: case TINT: case TUINT: case TUINTPTR: case TBOOL: case TPTR32: i = BtoR(~b); if(i && r->cost >= 0) { r->regno = i; return RtoB(i); } break; case TFLOAT32: case TFLOAT64: i = BtoF(~b); if(i && r->cost >= 0) { r->regno = i+NREG; return FtoB(i); } break; case TINT64: case TUINT64: case TPTR64: case TINTER: case TSTRUCT: case TARRAY: break; } return 0; }
uint32 allreg(uint32 b, Rgn *r) { Var *v; int i; v = var + r->varno; r->regno = 0; switch(v->etype) { default: diag(Z, "unknown etype %d/%d", bitno(b), v->etype); break; case TCHAR: case TUCHAR: case TSHORT: case TUSHORT: case TINT: case TUINT: case TLONG: case TULONG: case TVLONG: case TUVLONG: case TIND: case TARRAY: i = BtoR(~b); if(i && r->cost > 0) { r->regno = i; return RtoB(i); } break; case TDOUBLE: case TFLOAT: i = BtoF(~b); if(i && r->cost > 0) { r->regno = i; return FtoB(i); } break; } return 0; }
void powerinit(void) { extern ulong power_magic; extern ulong power_code; extern ulong doze_code; ulong *p, *q, i; p = (ulong*)(((ulong)&power_magic + 0x1f) & ~0x1f); q = &power_code; for (i = 0; i < 8; i++) *p++ = *q++; p = (ulong*)(((ulong)doze + 0x3f) & ~0x1f); q = &doze_code; for (i = 0; i < 3; i++) *p++ = *q++; *resumeaddr = (ulong) power_resume; addclock0link(blanktimer, 1000/HZ); addclock0link(suspendtimer, 1000/HZ); intrenable(GPIOrising, bitno(GPIO_PWR_ON_i), onoffintr, nil, "on/off"); }