2121//
2222
2323#include "blitter.h"
24+ #include "blitter_simd.h"
2425
2526#include <stdlib.h>
2627#include <string.h>
@@ -2833,12 +2834,7 @@ Patdhi := JOIN (patdhi, patd[32..63]);*/
28332834
28342835/*Lfu := LFU (lfu[0..1], srcdlo, srcdhi, dstdlo, dstdhi, lfu_func[0..3]);*/
28352836////////////////////////////////////// C++ CODE //////////////////////////////////////
2836- uint64_t funcmask [2 ] = { 0 , 0xFFFFFFFFFFFFFFFFLL };
2837- uint64_t func0 = funcmask [lfu_func & 0x01 ];
2838- uint64_t func1 = funcmask [(lfu_func >> 1 ) & 0x01 ];
2839- uint64_t func2 = funcmask [(lfu_func >> 2 ) & 0x01 ];
2840- uint64_t func3 = funcmask [(lfu_func >> 3 ) & 0x01 ];
2841- uint64_t lfu = (~srcd & ~dstd & func0 ) | (~srcd & dstd & func1 ) | (srcd & ~dstd & func2 ) | (srcd & dstd & func3 );
2837+ uint64_t lfu = blitter_simd_ops .lfu (srcd , dstd , lfu_func );
28422838 bool mir_bit , mir_byte ;
28432839 uint16_t masku ;
28442840 uint8_t e_coarse , e_fine ;
@@ -2850,14 +2846,12 @@ Patdhi := JOIN (patdhi, patd[32..63]);*/
28502846 uint8_t dech38el [2 ][8 ] = { { 0x01 , 0x02 , 0x04 , 0x08 , 0x10 , 0x20 , 0x40 , 0x80 },
28512847 { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } };
28522848 int en ;
2853- uint64_t cmpd ;
28542849 uint8_t dbinht ;
28552850 uint16_t addq [4 ];
28562851 uint8_t initcin [4 ] = { 0 , 0 , 0 , 0 };
28572852 uint16_t mask ;
28582853 uint64_t dmux [4 ];
28592854 uint64_t ddat ;
2860- uint64_t zwdata ;
28612855//////////////////////////////////////////////////////////////////////////////////////
28622856
28632857// Increment and Step Registers
@@ -2873,25 +2867,7 @@ Zstep := JOIN (zstep, zstep[0..31]);*/
28732867
28742868/*Datacomp := DATACOMP (dcomp[0..7], cmpdst, dstdlo, dstdhi, patdlo, patdhi, srcdlo, srcdhi);*/
28752869////////////////////////////////////// C++ CODE //////////////////////////////////////
2876- * dcomp = 0 ;
2877- cmpd = * patd ^ (cmpdst ? dstd : srcd );
2878-
2879- if ((cmpd & 0x00000000000000FFLL ) == 0 )
2880- * dcomp |= 0x01u ;
2881- if ((cmpd & 0x000000000000FF00LL ) == 0 )
2882- * dcomp |= 0x02u ;
2883- if ((cmpd & 0x0000000000FF0000LL ) == 0 )
2884- * dcomp |= 0x04u ;
2885- if ((cmpd & 0x00000000FF000000LL ) == 0 )
2886- * dcomp |= 0x08u ;
2887- if ((cmpd & 0x000000FF00000000LL ) == 0 )
2888- * dcomp |= 0x10u ;
2889- if ((cmpd & 0x0000FF0000000000LL ) == 0 )
2890- * dcomp |= 0x20u ;
2891- if ((cmpd & 0x00FF000000000000LL ) == 0 )
2892- * dcomp |= 0x40u ;
2893- if ((cmpd & 0xFF00000000000000LL ) == 0 )
2894- * dcomp |= 0x80u ;
2870+ * dcomp = blitter_simd_ops .dcomp (* patd , srcd , dstd , cmpdst );
28952871//////////////////////////////////////////////////////////////////////////////////////
28962872
28972873// Zed comparator for Z-buffer operations
@@ -2907,27 +2883,7 @@ Zstep := JOIN (zstep, zstep[0..31]);*/
29072883with srcshift bits 4 & 5 selecting the start position
29082884*/
29092885//So... basically what we have here is:
2910- * zcomp = 0 ;
2911-
2912- if ((((* srcz & 0x000000000000FFFFLL ) < (dstz & 0x000000000000FFFFLL )) && (zmode & 0x01 ))
2913- || (((* srcz & 0x000000000000FFFFLL ) == (dstz & 0x000000000000FFFFLL )) && (zmode & 0x02 ))
2914- || (((* srcz & 0x000000000000FFFFLL ) > (dstz & 0x000000000000FFFFLL )) && (zmode & 0x04 )))
2915- * zcomp |= 0x01u ;
2916-
2917- if ((((* srcz & 0x00000000FFFF0000LL ) < (dstz & 0x00000000FFFF0000LL )) && (zmode & 0x01 ))
2918- || (((* srcz & 0x00000000FFFF0000LL ) == (dstz & 0x00000000FFFF0000LL )) && (zmode & 0x02 ))
2919- || (((* srcz & 0x00000000FFFF0000LL ) > (dstz & 0x00000000FFFF0000LL )) && (zmode & 0x04 )))
2920- * zcomp |= 0x02u ;
2921-
2922- if ((((* srcz & 0x0000FFFF00000000LL ) < (dstz & 0x0000FFFF00000000LL )) && (zmode & 0x01 ))
2923- || (((* srcz & 0x0000FFFF00000000LL ) == (dstz & 0x0000FFFF00000000LL )) && (zmode & 0x02 ))
2924- || (((* srcz & 0x0000FFFF00000000LL ) > (dstz & 0x0000FFFF00000000LL )) && (zmode & 0x04 )))
2925- * zcomp |= 0x04u ;
2926-
2927- if ((((* srcz & 0xFFFF000000000000LL ) < (dstz & 0xFFFF000000000000LL )) && (zmode & 0x01 ))
2928- || (((* srcz & 0xFFFF000000000000LL ) == (dstz & 0xFFFF000000000000LL )) && (zmode & 0x02 ))
2929- || (((* srcz & 0xFFFF000000000000LL ) > (dstz & 0xFFFF000000000000LL )) && (zmode & 0x04 )))
2930- * zcomp |= 0x08u ;
2886+ * zcomp = blitter_simd_ops .zcomp (* srcz , dstz , zmode );
29312887
29322888//TEMP, TO TEST IF ZCOMP IS THE CULPRIT...
29332889//Nope, this is NOT the problem...
@@ -3159,25 +3115,8 @@ Dat[40-47] := MX4 (dat[40-47], dstdhi{8-15}, ddathi{8-15}, dstzhi{8-15}, srcz
31593115Dat[48-55] := MX4 (dat[48-55], dstdhi{16-23}, ddathi{16-23}, dstzhi{16-23}, srczhi{16-23}, mask[13], zed_selb[1]);
31603116Dat[56-63] := MX4 (dat[56-63], dstdhi{24-31}, ddathi{24-31}, dstzhi{24-31}, srczhi{24-31}, mask[14], zed_selb[1]);*/
31613117////////////////////////////////////// C++ CODE //////////////////////////////////////
3162- * wdata = ((ddat & mask ) | (dstd & ~mask )) & 0x00000000000000FFLL ;
3163- * wdata |= ((mask & 0x0100 ) ? ddat : dstd ) & 0x000000000000FF00LL ;
3164- * wdata |= ((mask & 0x0200 ) ? ddat : dstd ) & 0x0000000000FF0000LL ;
3165- * wdata |= ((mask & 0x0400 ) ? ddat : dstd ) & 0x00000000FF000000LL ;
3166- * wdata |= ((mask & 0x0800 ) ? ddat : dstd ) & 0x000000FF00000000LL ;
3167- * wdata |= ((mask & 0x1000 ) ? ddat : dstd ) & 0x0000FF0000000000LL ;
3168- * wdata |= ((mask & 0x2000 ) ? ddat : dstd ) & 0x00FF000000000000LL ;
3169- * wdata |= ((mask & 0x4000 ) ? ddat : dstd ) & 0xFF00000000000000LL ;
3170-
3171- //This is a crappy way of handling this, but it should work for now...
3172- zwdata = ((* srcz & mask ) | (dstz & ~mask )) & 0x00000000000000FFLL ;
3173- zwdata |= ((mask & 0x0100 ) ? * srcz : dstz ) & 0x000000000000FF00LL ;
3174- zwdata |= ((mask & 0x0200 ) ? * srcz : dstz ) & 0x0000000000FF0000LL ;
3175- zwdata |= ((mask & 0x0400 ) ? * srcz : dstz ) & 0x00000000FF000000LL ;
3176- zwdata |= ((mask & 0x0800 ) ? * srcz : dstz ) & 0x000000FF00000000LL ;
3177- zwdata |= ((mask & 0x1000 ) ? * srcz : dstz ) & 0x0000FF0000000000LL ;
3178- zwdata |= ((mask & 0x2000 ) ? * srcz : dstz ) & 0x00FF000000000000LL ;
3179- zwdata |= ((mask & 0x4000 ) ? * srcz : dstz ) & 0xFF00000000000000LL ;
3180- * srcz = zwdata ;
3118+ * wdata = blitter_simd_ops .byte_merge (ddat , dstd , mask );
3119+ * srcz = blitter_simd_ops .byte_merge (* srcz , dstz , mask );
31813120//////////////////////////////////////////////////////////////////////////////////////
31823121
31833122/*Data_enab[0-1] := BUF8 (data_enab[0-1], data_ena);
0 commit comments