/* * Given a pointer to previous IR, returns a pointer to new-style. Not * reentrant. */ struct dpf_ir *dpf_xlate(struct dpf_frozen_ir *ir, int nelems) { uint32 val, mask; static struct dpf_ir xir; int i; dpf_init(&xir); for(i = 0; i < nelems; i++) { if(ir[i].op != DPF_EQI) fatal(unexpected op); val = ir[i++].imm; /* check to see if there is an and */ mask = (ir[i].op == DPF_ANDI) ? ir[i++].imm : 0xffffffff; /* load the value */ switch(ir[i].op) { case DPF_BITS8I: dpf_meq8(&xir, ir[i].imm, mask, val); break; case DPF_BITS16I: dpf_meq16(&xir, ir[i].imm, mask, val); break; case DPF_BITS32I: dpf_meq32(&xir, ir[i].imm, mask, val); break; default: fatal(Unexpected op); } } return &xir; }
void dpf_eq16(struct dpf_ir *ir, uint16 offset, uint16 val) { dpf_meq16(ir, offset, IDENTITY_MASK16, val); }