MakeFunction _ppc_linear_hline8 ._ppc_linear_hline8: ;BITMAP * r3 ;x1 r4 ;y r5 ;x2 r6 ;color r7 lwz r9, _drawing_mode[TC](rtoc) lwz r11, 0(r9) cmpli cr0, r11, DRAW_MODE_MAX_SUPORTED ble cr0, @ok b ._linear_hline8[PR] @ok cmp cr0, r4, r6 bng cr0,@n_swap_x1_x2 mr r9, r6 mr r6, r4 mr r4, r9 @n_swap_x1_x2 lwz r8, BITMAP.clip(r3) cmpi cr1, r8, 0 beq cr1,@n_clip lwz r8, BITMAP.ct(r3) lwz r9, BITMAP.cb(r3) cmp cr6, r5, r8 cmp cr7, r5, r9 bltlr cr6 bgelr cr7 lwz r9, BITMAP.cl(r3) lwz r8, BITMAP.cr(r3) cmp cr0, r4, r9 cmp cr1, r6, r8 bnl cr0,@n_clip_x1 addi r4, r9, 0 @n_clip_x1: blt cr1,@n_clip_x2 addi r6, r8,-1 @n_clip_x2: cmp cr6, r6, r4 bltlr cr6 @n_clip: sub r12,r6,r4 addi r12,r12,1 rlwinm r7, r7, 0, 24, 31 ._ppc_linear_n_cache: rlwinm r8, r5, 2, 0, 29 add r8, r3, r8 lwz r10, 64(r8) add r9, r10, r4 cmpli cr7, r11,DRAW_MODE_COPY_PATTERN bge cr7,@pat_transfer cmpli cr0, r11,DRAW_MODE_SOLID MAKEDOUBLE8 r7,f0,r11 bne cr0,@xor HL8SOLID8 r9,r12,r7,f0,r3,r11 blr @xor: rlwinm. r11, r9, 0, 30, 31 beq @xor_pre_end li r4,4 sub r3,r4,r11 sub. r12,r12,r3 rlwinm r10, r9, 0, 0, 29 bge @xor_n_too_small addi r4,r12,4 rlwinm r4,r4,3,0,28 slw r7,r7,r4 li r12,0 @xor_n_too_small: lwz r4,0(r10) rlwinm r3,r11,3,0,28 srw r5,r7,r3 xor r6,r4,r5 stw r6,0(r10) addi r9,r10,4 @xor_pre_end: srawi. r3,r12,2 rlwinm r11, r12, 0, 30, 31 addi r9,r9,-4 beq @xor_pos mtctr r3 @xor_loop: lwzu r3, 4(r9) xor r4, r3,r7 stw r4, 0(r9) bdnz @xor_loop @xor_pos: cmpi cr6, r11, 0 li r5,4 beqlr cr6 lwzu r4,4(r9) sub r3,r5,r11 rlwinm r3,r3,3,0,28 slw r5,r7,r3 xor r6,r4,r5 stw r6,0(r9) @xor_end: blr @trans: lwz r11, color_map[TC](rtoc) lwz r10, 0(r11) rlwinm r3, r7, 8, 16, 23 add r8, r10, r3 rlwinm. r11, r9, 0, 30, 31 beq @trans_pre_end li r3,4 addi r9,r9,-1 sub r3,r3,r11 cmp cr6,r3,r12 blt cr6,@trans_pre_loop0 mr r3,r12 @trans_pre_loop0: mtctr r3 sub r12,r12,r3 @trans_pre_loop: lbzu r4, 1(r9) lbzx r5, r8, r4 stb r5, 0(r9) bdnz @trans_pre_loop addi r9,r9,1 @trans_pre_end: srawi. r3,r12,2 rlwinm r11, r12, 0, 30, 31 beq @trans_pos addi r9,r9,-4 mtctr r3 @trans_loop: lwzu r7, 4(r9) rlwinm r3,r7,0,24,31 rlwinm r4,r7,8,24,31 rlwinm r5,r7,16,24,31 rlwinm r6,r7,24,24,31 lbzx r3,r8,r3 lbzx r4,r8,r4 lbzx r5,r8,r5 lbzx r6,r8,r6 rlwinm r4,r4,24,0,31 rlwinm r5,r5,16,0,31 rlwinm r6,r6, 8,0,31 add r7,r3,r4 add r5,r5,r6 add r3,r7,r5 stw r3, 0(r9) bdnz @trans_loop addi r9,r9,4 @trans_pos: cmpi cr6,r11, 0 beq cr6,@trans_end addi r9,r9,-1 mtctr r11 @trans_pos_loop: lbzu r4, 1(r9) lbzx r5, r8, r4 stb r5, 0(r9) bdnz @trans_pos_loop @trans_end: blr @pat_transfer: cmpli cr7, r11,DRAW_MODE_TRANS beq cr7,@trans cmpli cr6, r11,DRAW_MODE_SOLID_PATTERN lwz r11, _drawing_y_anchor[TC](rtoc) lwz r3, _drawing_y_mask[TC](rtoc) lwz r10,0(r11) lwz r11,0(r3) add r8,r10,r5 and r8,r8,r11 lwz r5, _drawing_pattern[TC](rtoc) lwz r11, _drawing_x_anchor[TC](rtoc) lwz r3, _drawing_x_mask[TC](rtoc) rlwinm r8,r8,2,0,29 lwz r5,0(r5) add r5,r5,r8 lwz r8,64(r5) lwz r10,0(r11) lwz r6,0(r3) add r10,r10,r4 beq cr6,@solid_pat bgt cr6,@mask_pat @copy_pat: rlwinm. r11, r9, 0, 30, 31 beq @copy_pat_pre_end li r3,4 addi r9,r9,-1 sub r3,r3,r11 cmp cr6,r3,r12 blt cr6,@copy_pat_pre_loop0 mr r3,r12 @copy_pat_pre_loop0 mtctr r3 sub r12,r12,r3 @copy_pat_pre_loop: and r10,r10,r6 lbzx r3,r10,r8 addi r10,r10,1 stbu r3,1(r9) bdnz @copy_pat_pre_loop addi r9,r9,1 @copy_pat_pre_end: srawi. r3,r12,2 rlwinm r11, r12, 0, 30, 31 beq @copy_pat_pos addi r9,r9,-4 mtctr r3 @copy_pat_loop: and r10,r10,r6 lbzx r3,r10,r8 addi r10,r10,1 and r10,r10,r6 rlwinm r3, r3, 24, 0, 31 lbzx r4,r10,r8 addi r10,r10,1 and r10,r10,r6 rlwinm r4, r4, 16, 0, 31 lbzx r5,r10,r8 addi r10,r10,1 and r10,r10,r6 add r3,r3,r4 rlwinm r5, r5, 8, 0, 31 lbzx r7,r10,r8 addi r10,r10,1 add r3,r3,r5 add r3,r3,r7 stwu r3,4(r9) bdnz @copy_pat_loop addi r9,r9,4 @copy_pat_pos: cmpi cr6,r11, 0 beqlr cr6 addi r9,r9,-1 mtctr r11 @copy_pat_pos_loop: and r10,r10,r6 lbzx r3,r10,r8 addi r10,r10,1 stbu r3,1(r9) bdnz @copy_pat_pos_loop @copy_pat_end: blr @solid_pat: rlwinm. r11, r9, 0, 30, 31 beq @solid_pat_pre_end li r3,4 addi r9,r9,-1 sub r3,r3,r11 cmp cr6,r3,r12 blt cr6,@solid_pat_pre_loop0 mr r3,r12 @solid_pat_pre_loop0 mtctr r3 sub r12,r12,r3 @solid_pat_pre_loop: and r10,r10,r6 lbzx r3,r10,r8 cmpi cr7,r3,0 addi r10,r10,1 beq cr7,@solid_pat_pre_1 mr r3,r7 @solid_pat_pre_1 stbu r3,1(r9) bdnz @solid_pat_pre_loop addi r9,r9,1 @solid_pat_pre_end: srawi. r3,r12,2 rlwinm r11, r12, 0, 30, 31 beq @solid_pat_pos addi r9,r9,-4 mtctr r3 @solid_pat_loop: and r10,r10,r6 lbzx r3,r10,r8 addi r10,r10,1 cmpi cr7, r3,0 and r10,r10,r6 lbzx r4,r10,r8 beq cr7,@solid_pat_1 rlwinm r3, r7, 24, 0, 31 @solid_pat_1 addi r10,r10,1 cmpi cr7, r4,0 and r10,r10,r6 lbzx r5,r10,r8 beq cr7,@solid_pat_2 rlwinm r4, r7, 16, 0, 31 or r3,r3,r4 @solid_pat_2 addi r10,r10,1 cmpi cr7, r5,0 and r10,r10,r6 lbzx r4,r10,r8 beq cr7,@solid_pat_3 rlwinm r5, r7, 8, 0, 31 or r3,r3,r5 @solid_pat_3 cmpi cr7, r4,0 addi r10,r10,1 beq cr7,@solid_pat_4 or r3,r3,r7 @solid_pat_4 stwu r3,4(r9) bdnz @solid_pat_loop addi r9,r9,4 @solid_pat_pos: cmpi cr6,r11, 0 beqlr cr6 addi r9,r9,-1 mtctr r11 @solid_pat_pos_loop: and r10,r10,r6 lbzx r3,r10,r8 cmpi cr7,r3,0 addi r10,r10,1 beq cr7,@solid_pat_pos_1 mr r3,r7 @solid_pat_pos_1 stbu r3,1(r9) bdnz @solid_pat_pos_loop @solid_pat_end: blr @mask_pat mtctr r12 @mask_pat_loop: and r10,r10,r6 lbzx r3,r10,r8 cmpi cr7,r3,0 addi r10,r10,1 beq cr7,@mask_pat_1 stb r7,0(r9) @mask_pat_1 addi r9,r9,1 bdnz @mask_pat_loop blr ._ppc_linear_hline8_end: MakeFunction _ppc_linear_hline8_32 ._ppc_linear_hline8_32: ;BITMAP * r3 ;x1 r4 ;y r5 ;x2 r6 ;color r7 ;cache optimised only solid mode on memory cacheble lwz r9, _drawing_mode[TC](rtoc) lwz r11, 0(r9) cmpli cr0, r11, DRAW_MODE_SOLID beq cr0, @ok b ._ppc_linear_hline8 @ok cmp cr0, r4, r6 bng cr0,@n_swap_x1_x2 mr r9, r6 mr r6, r4 mr r4, r9 @n_swap_x1_x2 lwz r8, BITMAP.clip(r3) cmpi cr1, r8, 0 beq cr1,@n_clip lwz r8, BITMAP.ct(r3) lwz r9, BITMAP.cb(r3) cmp cr6, r5, r8 cmp cr7, r5, r9 bltlr cr6 bgelr cr7 lwz r9, BITMAP.cl(r3) lwz r8, BITMAP.cr(r3) cmp cr0, r4, r9 cmp cr1, r6, r8 bnl cr0,@n_clip_x1 addi r4, r9, 0 @n_clip_x1: blt cr1,@n_clip_x2 addi r6, r8,-1 @n_clip_x2: cmp cr6, r6, r4 bltlr cr6 @n_clip: sub r12,r6,r4 addi r12,r12,1 cmpli cr0,r12,64 rlwinm r7, r7, 0, 24, 31 blt cr0,._ppc_linear_n_cache rlwinm r8, r5, 2, 0, 29 add r8, r3, r8 lwz r10, 64(r8) add r9, r10, r4 MAKEDOUBLE8 r7,f0,r11 HL8SOLID32 r9,r12,r7,f0,r3,r11 blr ._ppc_linear_hline8_32_end: