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: