static __inline void asm_cel_light_edge(unsigned char w, BYTE *tbl, BYTE **dst, BYTE **src); static __inline void asm_cel_light_square(unsigned char w, BYTE *tbl, BYTE **dst, BYTE **src); static __inline void asm_trans_light_cel_0_2(unsigned char w, BYTE *tbl, BYTE **dst, BYTE **src); static __inline void asm_trans_light_edge_0_2(unsigned char w, BYTE *tbl, BYTE **dst, BYTE **src); static __inline void asm_trans_light_square_0_2(unsigned char w, BYTE *tbl, BYTE **dst, BYTE **src); static __inline void asm_trans_light_cel_1_3(unsigned char w, BYTE *tbl, BYTE **dst, BYTE **src); static __inline void asm_trans_light_edge_1_3(unsigned char w, BYTE *tbl, BYTE **dst, BYTE **src); static __inline void asm_trans_light_square_1_3(unsigned char w, BYTE *tbl, BYTE **dst, BYTE **src); static __inline unsigned int asm_trans_light_mask(unsigned char w, BYTE *tbl, BYTE **dst, BYTE **src, unsigned int mask); static __inline void asm_cel_light_edge(unsigned char w, BYTE *tbl, BYTE **dst, BYTE **src) { unsigned char l = w >> 1; if (w & 1) { (*dst)[0] = tbl[(*src)[0]]; (*src)++; (*dst)++; } if (l & 1) { (*dst)[0] = tbl[(*src)[0]]; (*dst)[1] = tbl[(*src)[1]]; *src += 2; *dst += 2; } asm_cel_light_square(l >> 1, tbl, dst, src); } static __inline void asm_cel_light_square(unsigned char w, BYTE *tbl, BYTE **dst, BYTE **src) { for (; w; --w) { (*dst)[0] = tbl[(*src)[0]]; (*dst)[1] = tbl[(*src)[1]]; (*dst)[2] = tbl[(*src)[2]]; (*dst)[3] = tbl[(*src)[3]]; *src += 4; *dst += 4; } } static __inline void asm_trans_light_cel_0_2(unsigned char w, BYTE *tbl, BYTE **dst, BYTE **src) { if (!(w & 1)) { asm_trans_light_edge_1_3(w >> 1, tbl, dst, src); } else { (*src)++; (*dst)++; asm_trans_light_edge_0_2(w >> 1, tbl, dst, src); } } static __inline void asm_trans_light_edge_0_2(unsigned char w, BYTE *tbl, BYTE **dst, BYTE **src) { unsigned char l = w >> 1; if (w & 1) { (*dst)[0] = tbl[(*src)[0]]; *src += 2; *dst += 2; } if (l) { asm_trans_light_square_0_2(l, tbl, dst, src); } } static __inline void asm_trans_light_square_0_2(unsigned char w, BYTE *tbl, BYTE **dst, BYTE **src) { for (; w; --w) { (*dst)[0] = tbl[(*src)[0]]; (*dst)[2] = tbl[(*src)[2]]; *src += 4; *dst += 4; } } static __inline void asm_trans_light_cel_1_3(unsigned char w, BYTE *tbl, BYTE **dst, BYTE **src) { if (!(w & 1)) { asm_trans_light_edge_0_2(w >> 1, tbl, dst, src); } else { (*dst)[0] = tbl[(*src)[0]]; (*src)++; (*dst)++; asm_trans_light_edge_1_3(w >> 1, tbl, dst, src); } } static __inline void asm_trans_light_edge_1_3(unsigned char w, BYTE *tbl, BYTE **dst, BYTE **src) { unsigned char l = w >> 1; if (w & 1) { (*dst)[1] = tbl[(*src)[1]]; *src += 2; *dst += 2; } if (l) { asm_trans_light_square_1_3(l, tbl, dst, src); } } static __inline void asm_trans_light_square_1_3(unsigned char w, BYTE *tbl, BYTE **dst, BYTE **src) { for (; w; --w) { (*dst)[1] = tbl[(*src)[1]]; (*dst)[3] = tbl[(*src)[3]]; *src += 4; *dst += 4; } } static __inline unsigned int asm_trans_light_mask(unsigned char w, BYTE *tbl, BYTE **dst, BYTE **src, unsigned int mask) { for (; w; --w, (*src)++, (*dst)++, mask *= 2) { if (mask & 0x80000000) (*dst)[0] = tbl[(*src)[0]]; } return mask; }