fix instruction matching errors in i386 CFI generation

fdiv and fmul instructions were wrongly matched by the rules for
integer div and mul instructions, leading to incorrect conclusions
about register values being clobbered.
This commit is contained in:
Alex Dowad 2015-10-02 13:32:33 +02:00 committed by Rich Felker
parent 0650a05947
commit dc97951402

View File

@ -188,9 +188,9 @@ function trashed(register) {
/(add|addl|sub|subl|and|or|xor|lea|sal|sar|shl|shr) %e(ax|bx|cx|dx|si|di|bp),/ {
trashed(get_reg1())
}
/i?mul [^,]*$/ { trashed("eax"); trashed("edx") }
/i?mul %e(ax|bx|cx|dx|si|di|bp),/ { trashed(get_reg1()) }
/i?div/ { trashed("eax"); trashed("edx") }
/^i?mul [^,]*$/ { trashed("eax"); trashed("edx") }
/^i?mul %e(ax|bx|cx|dx|si|di|bp),/ { trashed(get_reg1()) }
/^i?div/ { trashed("eax"); trashed("edx") }
/(dec|inc|not|neg|pop) %e(ax|bx|cx|dx|si|di|bp)/ { trashed(get_reg()) }
/cpuid/ { trashed("eax"); trashed("ebx"); trashed("ecx"); trashed("edx") }