Translate fsub/fdiv correctly. See #256.

This commit is contained in:
Christian Kamm
2009-05-06 18:08:44 +02:00
parent c60ce29bde
commit 8a8818104b
2 changed files with 46 additions and 6 deletions

View File

@@ -1886,10 +1886,30 @@ namespace AsmParserx8632
}
break;
default:
// special case fdiv, fsub: see dmd 840, ldc 256
if (strncmp(mnemonic, "fsub", 4) == 0 ||
strncmp(mnemonic, "fdiv", 4) == 0)
{
// replace:
// f{sub,div}r{p,} <-> f{sub,div}{p,}
if (mnemonic[4] == 'r')
{
insnTemplate.write(mnemonic, 4);
insnTemplate.write(mnemonic+5, strlen(mnemonic)-5);
}
else
{
insnTemplate.write(mnemonic, 4) << "r";
insnTemplate.write(mnemonic+4, strlen(mnemonic)-4);
}
}
else
{
insnTemplate << mnemonic;
if ( type_char )
insnTemplate << type_char;
break;
}
if ( type_char )
insnTemplate << type_char;
break;
}
switch ( opInfo->implicitClobbers & Clb_DXAX_Mask )

View File

@@ -2008,10 +2008,30 @@ namespace AsmParserx8664
}
break;
default:
// special case fdiv, fsub: see dmd 840, ldc 256
if (strncmp(mnemonic, "fsub", 4) == 0 ||
strncmp(mnemonic, "fdiv", 4) == 0)
{
// replace:
// f{sub,div}r{p,} <-> f{sub,div}{p,}
if (mnemonic[4] == 'r')
{
insnTemplate.write(mnemonic, 4);
insnTemplate.write(mnemonic+5, strlen(mnemonic)-5);
}
else
{
insnTemplate.write(mnemonic, 4) << "r";
insnTemplate.write(mnemonic+4, strlen(mnemonic)-4);
}
}
else
{
insnTemplate << mnemonic;
if ( type_char )
insnTemplate << type_char;
break;
}
if ( type_char )
insnTemplate << type_char;
break;
}
switch ( opInfo->implicitClobbers & Clb_DXAX_Mask )