@@ -1535,7 +1535,6 @@ void gpoly_stb_md05uni_var040_nz(struct gpoly_state *st)
15351535 if (height > vec_window_height )
15361536 height = vec_window_height ;
15371537 st -> var_0C0 = height - st -> var_164 ;
1538-
15391538 if (st -> var_0C0 <= 0 )
15401539 break ;
15411540
@@ -1687,7 +1686,6 @@ void gpoly_stb_md05uni_var040_zr(struct gpoly_state *st)
16871686 if (height > vec_window_height )
16881687 height = vec_window_height ;
16891688 st -> var_0C0 = height - st -> var_164 ;
1690-
16911689 if (st -> var_0C0 <= 0 )
16921690 break ;
16931691
@@ -1703,12 +1701,344 @@ void gpoly_stb_md05uni(struct gpoly_state *st)
17031701 gpoly_stb_md05uni_var040_zr (st );
17041702}
17051703
1704+ void gpoly_stb_md05p64_var040_nz (struct gpoly_state * st )
1705+ {
1706+ #if 0
1707+ asm volatile (
1708+ "call ASM_gpoly_stb_md05p64_var040_nz\n"
1709+ : : "a" (st ));
1710+ return ;
1711+ #endif
1712+ int loc_08C ;
1713+ int loc_088 ;
1714+ int loc_0E4 ;
1715+ ubyte * out_ln ;
1716+ int range_beg , range_end ;
1717+ int height ;
1718+
1719+ st -> var_104 = vec_screen_width ;
1720+ st -> var_180 = 2 ;
1721+ st -> var_0CC = st -> var_0A4 ;
1722+ st -> var_0C4 = st -> var_0A0 ;
1723+ st -> var_0C8 = st -> var_09C ;
1724+
1725+ if (st -> var_134 < 0 ) {
1726+ st -> var_12C = st -> var_1B0 ;
1727+ st -> var_128 = st -> var_1AC ;
1728+ } else {
1729+ st -> var_12C = st -> var_1AC ;
1730+ st -> var_128 = st -> var_1B0 ;
1731+ }
1732+ loc_08C = st -> var_08C ;
1733+ loc_088 = st -> var_088 ;
1734+ loc_0E4 = st -> var_084 ;
1735+ out_ln = & vec_screen [st -> var_17C * vec_screen_width ];
1736+ if (st -> var_17C > vec_window_height )
1737+ return ;
1738+
1739+ height = st -> var_164 ;
1740+ if (height > vec_window_height )
1741+ height = vec_window_height ;
1742+ st -> var_0C0 = height - st -> var_17C ;
1743+
1744+ st -> var_074 = st -> var_178 ;
1745+ range_beg = st -> var_174 ;
1746+ range_end = st -> var_174 ;
1747+
1748+ if (st -> var_0C0 == 0 )
1749+ st -> var_038 = 0 ;
1750+ else
1751+ st -> var_038 = st -> var_17C ;
1752+
1753+ ubyte * o ; // edi
1754+ int range_beg_scr , range_end_scr ;
1755+ ubyte * v19 ; // edi
1756+ int range_len ;
1757+
1758+ while (1 )
1759+ {
1760+ for (; st -> var_038 < 0 ; st -> var_038 ++ )
1761+ {
1762+ gpoly_stb_drw_incr1b (& loc_088 , & loc_0E4 , & loc_08C , st );
1763+ range_beg += st -> var_12C ;
1764+ range_end += st -> var_128 ;
1765+ out_ln += st -> var_104 ;
1766+ st -> var_0C0 -- ;
1767+ if (st -> var_0C0 == 0 )
1768+ break ;
1769+ }
1770+ for (; st -> var_0C0 > 0 ; st -> var_0C0 -- )
1771+ {
1772+ st -> var_0FC = range_beg ;
1773+ st -> var_0F8 = range_end ;
1774+ st -> var_0F4 = out_ln ;
1775+ range_beg_scr = range_beg >> 16 ;
1776+ if (range_beg_scr < 0 )
1777+ {
1778+ for (; st -> var_074 > 0 ; st -> var_074 -- ) {
1779+ gpoly_stb_drw_decr4 (& loc_088 , & loc_0E4 , & loc_08C , st );
1780+ }
1781+ for (; st -> var_074 < 0 ; st -> var_074 ++ ) {
1782+ gpoly_stb_drw_incr4 (& loc_088 , & loc_0E4 , & loc_08C , st );
1783+ }
1784+ }
1785+ else
1786+ {
1787+ for (; st -> var_074 < range_beg_scr ; st -> var_074 ++ ) {
1788+ gpoly_stb_drw_incr4 (& loc_088 , & loc_0E4 , & loc_08C , st );
1789+ }
1790+ for (; st -> var_074 > range_beg_scr ; st -> var_074 -- ) {
1791+ gpoly_stb_drw_decr4 (& loc_088 , & loc_0E4 , & loc_08C , st );
1792+ }
1793+ }
1794+ st -> var_0E0 = loc_08C ;
1795+ st -> var_0E4 = loc_0E4 ;
1796+ st -> var_0D8 = loc_088 ;
1797+ range_end_scr = range_end >> 16 ;
1798+ if (range_end_scr > vec_window_width )
1799+ range_end_scr = vec_window_width ;
1800+ v19 = & st -> var_0F4 [st -> var_074 ];
1801+ range_len = range_end_scr - st -> var_074 ;
1802+ if (range_len > 0 )
1803+ {
1804+ int kk_max ;
1805+
1806+ kk_max = range_len & 0xF ;
1807+ o = & v19 [gpoly_countdown [kk_max ]];
1808+ st -> var_0D4 = range_len ;
1809+
1810+ while ( 1 )
1811+ {
1812+ int kk ;
1813+
1814+ for (kk = kk_max ; kk > 0 ; kk -- ) {
1815+ o [16 - kk ] = gpoly_stb_drw_pixel2 (& loc_088 , & loc_0E4 , & loc_08C , st );
1816+ }
1817+ if (kk_max != 0 ) {
1818+ o += 16 ;
1819+ st -> var_0D4 -= 16 ;
1820+ if (st -> var_0D4 <= 0 )
1821+ break ;
1822+ }
1823+ o [0 ] = gpoly_stb_drw_pixel2 (& loc_088 , & loc_0E4 , & loc_08C , st );
1824+ kk_max = 15 ;
1825+ }
1826+ }
1827+ range_beg = st -> var_12C + st -> var_0FC ;
1828+ range_end = st -> var_128 + st -> var_0F8 ;
1829+ loc_08C = st -> var_0E0 ;
1830+ loc_0E4 = st -> var_0E4 ;
1831+ loc_088 = st -> var_0D8 ;
1832+ gpoly_stb_drw_incr1b (& loc_088 , & loc_0E4 , & loc_08C , st );
1833+ out_ln = & st -> var_0F4 [st -> var_104 ];
1834+ }
1835+
1836+ st -> var_180 -- ;
1837+ if (st -> var_180 == 0 )
1838+ return ;
1839+
1840+ st -> var_0FC = range_beg ;
1841+ if (st -> var_134 >= 0 )
1842+ {
1843+ st -> var_12C = st -> var_1A8 ;
1844+ st -> var_0CC = st -> var_098 ;
1845+ st -> var_0C4 = st -> var_094 ;
1846+ st -> var_0C8 = st -> var_090 ;
1847+ loc_08C = st -> var_080 ;
1848+ loc_088 = st -> var_07C ;
1849+ loc_0E4 = st -> var_078 ;
1850+ st -> var_074 = st -> var_160 ;
1851+ range_beg = st -> var_15C ;
1852+ }
1853+ else
1854+ {
1855+ st -> var_128 = st -> var_1A8 ;
1856+ range_end = st -> var_15C ;
1857+ range_beg = st -> var_0FC ;
1858+ }
1859+
1860+ height = st -> var_14C ;
1861+ if (height > vec_window_height )
1862+ height = vec_window_height ;
1863+ st -> var_0C0 = height - st -> var_164 ;
1864+ if (st -> var_0C0 <= 0 )
1865+ break ;
1866+
1867+ st -> var_038 = st -> var_164 ;
1868+ }
1869+ }
1870+
1871+ void gpoly_stb_md05p64_var040_zr (struct gpoly_state * st )
1872+ {
1873+ #if 0
1874+ asm volatile (
1875+ "call ASM_gpoly_stb_md05p64_var040_zr\n"
1876+ : : "a" (st ));
1877+ return ;
1878+ #endif
1879+ int loc_08C ;
1880+ int loc_088 ;
1881+ int loc_0E4 ;
1882+ ubyte * out_ln ;
1883+ int range_beg , range_end ;
1884+ int height ;
1885+
1886+ st -> var_104 = vec_screen_width ;
1887+ st -> var_180 = 2 ;
1888+ st -> var_0CC = st -> var_0A4 ;
1889+ st -> var_0C4 = st -> var_0A0 ;
1890+ st -> var_0C8 = st -> var_09C ;
1891+
1892+ if (st -> var_134 < 0 ) {
1893+ st -> var_12C = st -> var_1B0 ;
1894+ st -> var_128 = st -> var_1AC ;
1895+ } else {
1896+ st -> var_12C = st -> var_1AC ;
1897+ st -> var_128 = st -> var_1B0 ;
1898+ }
1899+ loc_08C = st -> var_08C ;
1900+ loc_088 = st -> var_088 ;
1901+ loc_0E4 = st -> var_084 ;
1902+ out_ln = & vec_screen [st -> var_17C * vec_screen_width ];
1903+ if (st -> var_17C > vec_window_height )
1904+ return ;
1905+
1906+ height = st -> var_164 ;
1907+ if (height > vec_window_height )
1908+ height = vec_window_height ;
1909+ st -> var_0C0 = height - st -> var_17C ;
1910+
1911+ st -> var_074 = st -> var_178 ;
1912+ range_beg = st -> var_174 ;
1913+ range_end = st -> var_174 ;
1914+
1915+ if (st -> var_0C0 == 0 )
1916+ st -> var_038 = 0 ;
1917+ else
1918+ st -> var_038 = st -> var_17C ;
1919+
1920+ ubyte * o ; // edi
1921+ int range_beg_scr , range_end_scr ;
1922+ ubyte * v19 ; // edi
1923+ int range_len ;
1924+
1925+ while (1 )
1926+ {
1927+ for (; st -> var_038 < 0 ; st -> var_038 ++ )
1928+ {
1929+ gpoly_stb_drw_incr1b (& loc_088 , & loc_0E4 , & loc_08C , st );
1930+ range_beg += st -> var_12C ;
1931+ range_end += st -> var_128 ;
1932+ out_ln += st -> var_104 ;
1933+ st -> var_0C0 -- ;
1934+ if (st -> var_0C0 == 0 )
1935+ break ;
1936+ }
1937+ for (; st -> var_0C0 > 0 ; st -> var_0C0 -- )
1938+ {
1939+ st -> var_0FC = range_beg ;
1940+ st -> var_0F8 = range_end ;
1941+ st -> var_0F4 = out_ln ;
1942+ range_beg_scr = range_beg >> 16 ;
1943+ if (range_beg_scr > st -> var_074 )
1944+ {
1945+ for (; st -> var_074 < range_beg_scr ; st -> var_074 ++ ) {
1946+ gpoly_stb_drw_incr4 (& loc_088 , & loc_0E4 , & loc_08C , st );
1947+ }
1948+ }
1949+ else
1950+ {
1951+ for (; st -> var_074 > range_beg_scr ; st -> var_074 -- ) {
1952+ gpoly_stb_drw_decr4 (& loc_088 , & loc_0E4 , & loc_08C , st );
1953+ }
1954+ }
1955+ st -> var_0E0 = loc_08C ;
1956+ st -> var_0E4 = loc_0E4 ;
1957+ st -> var_0D8 = loc_088 ;
1958+ range_end_scr = range_end >> 16 ;
1959+ v19 = & st -> var_0F4 [st -> var_074 ];
1960+ range_len = range_end_scr - st -> var_074 ;
1961+ if (range_len > 0 )
1962+ {
1963+ int kk_max ;
1964+
1965+ kk_max = range_len & 0xF ;
1966+ o = & v19 [gpoly_countdown [kk_max ]];
1967+ st -> var_0D4 = range_len ;
1968+
1969+ while ( 1 )
1970+ {
1971+ int kk ;
1972+
1973+ for (kk = kk_max ; kk > 0 ; kk -- ) {
1974+ o [16 - kk ] = gpoly_stb_drw_pixel2 (& loc_088 , & loc_0E4 , & loc_08C , st );
1975+ }
1976+ if (kk_max != 0 ) {
1977+ o += 16 ;
1978+ st -> var_0D4 -= 16 ;
1979+ if (st -> var_0D4 <= 0 )
1980+ break ;
1981+ }
1982+ o [0 ] = gpoly_stb_drw_pixel2 (& loc_088 , & loc_0E4 , & loc_08C , st );
1983+ kk_max = 15 ;
1984+ }
1985+ }
1986+ range_beg = st -> var_12C + st -> var_0FC ;
1987+ range_end = st -> var_128 + st -> var_0F8 ;
1988+ loc_08C = st -> var_0E0 ;
1989+ loc_0E4 = st -> var_0E4 ;
1990+ loc_088 = st -> var_0D8 ;
1991+ gpoly_stb_drw_incr1b (& loc_088 , & loc_0E4 , & loc_08C , st );
1992+ out_ln = & st -> var_0F4 [st -> var_104 ];
1993+ }
1994+
1995+ st -> var_180 -- ;
1996+ if (st -> var_180 == 0 )
1997+ return ;
1998+
1999+ st -> var_0FC = range_beg ;
2000+ if (st -> var_134 >= 0 )
2001+ {
2002+ st -> var_12C = st -> var_1A8 ;
2003+ st -> var_0CC = st -> var_098 ;
2004+ st -> var_0C4 = st -> var_094 ;
2005+ st -> var_0C8 = st -> var_090 ;
2006+ loc_08C = st -> var_080 ;
2007+ loc_088 = st -> var_07C ;
2008+ loc_0E4 = st -> var_078 ;
2009+ st -> var_074 = st -> var_160 ;
2010+ range_beg = st -> var_15C ;
2011+ }
2012+ else
2013+ {
2014+ st -> var_128 = st -> var_1A8 ;
2015+ range_end = st -> var_15C ;
2016+ range_beg = st -> var_0FC ;
2017+ }
2018+
2019+ height = st -> var_14C ;
2020+ if (height > vec_window_height )
2021+ height = vec_window_height ;
2022+ st -> var_0C0 = height - st -> var_164 ;
2023+ if (st -> var_0C0 <= 0 )
2024+ return ;
2025+
2026+ st -> var_038 = st -> var_164 ;
2027+ }
2028+ }
2029+
17062030void gpoly_stb_md05p64 (struct gpoly_state * st )
17072031{
2032+ #if 0
17082033 asm volatile (
17092034 "call ASM_gpoly_stb_md05p64\n"
17102035 : : "a" (st ));
17112036 return ;
2037+ #endif
2038+ if (st -> var_040 != 0 )
2039+ gpoly_stb_md05p64_var040_nz (st );
2040+ else
2041+ gpoly_stb_md05p64_var040_zr (st );
17122042}
17132043
17142044void draw_gpoly (struct PolyPoint * point_a , struct PolyPoint * point_b , struct PolyPoint * point_c )
0 commit comments