Mercurial > projects > ldc
comparison gen/asm-x86-64.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 |
---|---|
2006 assert ( type_char != 0 ); | 2006 assert ( type_char != 0 ); |
2007 insnTemplate.write(mnemonic, mlen-1) << tc_1 << type_char; | 2007 insnTemplate.write(mnemonic, mlen-1) << tc_1 << type_char; |
2008 } | 2008 } |
2009 break; | 2009 break; |
2010 default: | 2010 default: |
2011 // special case fdiv, fsub: see dmd 840, ldc 256 | |
2012 if (strncmp(mnemonic, "fsub", 4) == 0 || | |
2013 strncmp(mnemonic, "fdiv", 4) == 0) | |
2014 { | |
2015 // replace: | |
2016 // f{sub,div}r{p,} <-> f{sub,div}{p,} | |
2017 if (mnemonic[4] == 'r') | |
2018 { | |
2019 insnTemplate.write(mnemonic, 4); | |
2020 insnTemplate.write(mnemonic+5, strlen(mnemonic)-5); | |
2021 } | |
2022 else | |
2023 { | |
2024 insnTemplate.write(mnemonic, 4) << "r"; | |
2025 insnTemplate.write(mnemonic+4, strlen(mnemonic)-4); | |
2026 } | |
2027 } | |
2028 else | |
2029 { | |
2011 insnTemplate << mnemonic; | 2030 insnTemplate << mnemonic; |
2012 if ( type_char ) | 2031 } |
2013 insnTemplate << type_char; | 2032 if ( type_char ) |
2014 break; | 2033 insnTemplate << type_char; |
2034 break; | |
2015 } | 2035 } |
2016 | 2036 |
2017 switch ( opInfo->implicitClobbers & Clb_DXAX_Mask ) | 2037 switch ( opInfo->implicitClobbers & Clb_DXAX_Mask ) |
2018 { | 2038 { |
2019 case Clb_SizeAX: | 2039 case Clb_SizeAX: |