i386.md (floatunssi<mode>2 expand): Add new expand for QI/HImode operand to produce more effictive code for...

* config/i386/i386.md (floatunssi<mode>2 expand): Add new
        expand for QI/HImode operand to produce more effictive code for
        unsigned char(short) --> float(double) conversion.

From-SVN: r201663
This commit is contained in:
Yuri Rumyantsev 2013-08-12 12:28:47 +00:00 committed by Kirill Yukhin
parent 94109a6a3a
commit 15dd8b3a8c
2 changed files with 18 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2013-08-12 Yuri Rumyantsev <ysrumyan@gmail.com>
* config/i386/i386.md (floatunssi<mode>2 expand): Add new
expand for QI/HImode operand to produce more effictive code for
unsigned char(short) --> float(double) conversion.
2013-08-12 Alexander Monakov <amonakov@ispras.ru>
* doc/invoke.texi: Mention that -ftls-model does not force the final

View File

@ -5037,6 +5037,18 @@
&& reload_completed"
[(set (match_dup 0) (float:X87MODEF (match_dup 1)))])
(define_expand "floatuns<SWI12:mode><X87MODEF:mode>2"
[(set (match_operand:X87MODEF 0 "register_operand")
(unsigned_float:X87MODEF
(match_operand:SWI12 1 "nonimmediate_operand")))]
"!TARGET_64BIT
&& SSE_FLOAT_MODE_P (<X87MODEF:MODE>mode) && TARGET_SSE_MATH"
{
operands[1] = convert_to_mode (SImode, operands[1], 1);
emit_insn (gen_floatsi<X87MODEF:mode>2 (operands[0], operands[1]));
DONE;
})
;; Avoid store forwarding (partial memory) stall penalty by extending
;; SImode value to DImode through XMM register instead of pushing two
;; SImode values to stack. Note that even !TARGET_INTER_UNIT_MOVES_TO_VEC