Mercurial > projects > ldc
comparison gen/asm-x86-32.h @ 1302:a26b99b7e293
Translate fsub/fdiv correctly. See #256.
author | Christian Kamm <kamm incasoftware de> |
---|---|
date | Wed, 06 May 2009 18:08:44 +0200 |
parents | 1e30cc395d2e |
children | c250e03d8a5b |
comparison
equal
deleted
inserted
replaced
1301:1e30cc395d2e | 1302:a26b99b7e293 |
---|---|
1884 assert ( type_char != 0 ); | 1884 assert ( type_char != 0 ); |
1885 insnTemplate.write(mnemonic, mlen-1) << tc_1 << type_char; | 1885 insnTemplate.write(mnemonic, mlen-1) << tc_1 << type_char; |
1886 } | 1886 } |
1887 break; | 1887 break; |
1888 default: | 1888 default: |
1889 // special case fdiv, fsub: see dmd 840, ldc 256 | |
1890 if (strncmp(mnemonic, "fsub", 4) == 0 || | |
1891 strncmp(mnemonic, "fdiv", 4) == 0) | |
1892 { | |
1893 // replace: | |
1894 // f{sub,div}r{p,} <-> f{sub,div}{p,} | |
1895 if (mnemonic[4] == 'r') | |
1896 { | |
1897 insnTemplate.write(mnemonic, 4); | |
1898 insnTemplate.write(mnemonic+5, strlen(mnemonic)-5); | |
1899 } | |
1900 else | |
1901 { | |
1902 insnTemplate.write(mnemonic, 4) << "r"; | |
1903 insnTemplate.write(mnemonic+4, strlen(mnemonic)-4); | |
1904 } | |
1905 } | |
1906 else | |
1907 { | |
1889 insnTemplate << mnemonic; | 1908 insnTemplate << mnemonic; |
1890 if ( type_char ) | 1909 } |
1891 insnTemplate << type_char; | 1910 if ( type_char ) |
1892 break; | 1911 insnTemplate << type_char; |
1912 break; | |
1893 } | 1913 } |
1894 | 1914 |
1895 switch ( opInfo->implicitClobbers & Clb_DXAX_Mask ) | 1915 switch ( opInfo->implicitClobbers & Clb_DXAX_Mask ) |
1896 { | 1916 { |
1897 case Clb_SizeAX: | 1917 case Clb_SizeAX: |