+ mode => $mode_xmm
+},
+
+# integer shift left, qword
+xPsllq => {
+ irn_flags => "R",
+ reg_req => { in => [ "xmm", "xmm" ], out => [ "in_r1 !in_r2" ] },
+ emit => '. psllq %SI1, %D0',
+ latency => 3,
+ units => [ "SSE" ],
+ mode => $mode_xmm
+},
+
+# integer shift right, dword
+xPsrld => {
+ irn_flags => "R",
+ reg_req => { in => [ "xmm", "xmm" ], out => [ "in_r1 !in_r2" ] },
+ emit => '. psrld %SI1, %D0',
+ latency => 1,
+ units => [ "SSE" ],
+ mode => $mode_xmm
+},
+
+# mov from integer to SSE register
+xMovd => {
+ irn_flags => "R",
+ reg_req => { in => [ "gp" ], out => [ "xmm" ] },
+ emit => '. movd %S0, %D0',
+ latency => 1,
+ units => [ "SSE" ],
+ mode => $mode_xmm
+},
+
+# commutative operations
+
+xAdd => {
+ irn_flags => "R",
+ state => "exc_pinned",
+ reg_req => { in => [ "gp", "gp", "none", "xmm", "xmm" ], out => [ "in_r4 in_r5" ] },
+ ins => [ "base", "index", "mem", "left", "right" ],
+ am => "source,binary",
+ emit => '. add%XXM %binop',
+ latency => 4,
+ units => [ "SSE" ],
+ mode => $mode_xmm
+},
+
+xMul => {
+ irn_flags => "R",
+ state => "exc_pinned",
+ reg_req => { in => [ "gp", "gp", "none", "xmm", "xmm" ], out => [ "in_r4 in_r5" ] },
+ ins => [ "base", "index", "mem", "left", "right" ],
+ am => "source,binary",
+ emit => '. mul%XXM %binop',
+ latency => 4,
+ units => [ "SSE" ],
+ mode => $mode_xmm
+},
+
+xMax => {
+ irn_flags => "R",
+ state => "exc_pinned",
+ reg_req => { in => [ "gp", "gp", "none", "xmm", "xmm" ], out => [ "in_r4 in_r5" ] },
+ ins => [ "base", "index", "mem", "left", "right" ],
+ am => "source,binary",
+ emit => '. max%XXM %binop',
+ latency => 2,
+ units => [ "SSE" ],
+ mode => $mode_xmm