+"Eor" => {
+ "irn_flags" => "R",
+ "comment" => "construct Eor: Eor(a, b) = Eor(b, a) = a EOR b",
+ "cmp_attr" => " return ia32_compare_immop_attr(attr_a, attr_b);\n",
+ "reg_req" => { "in" => [ "gp", "gp", "gp", "gp", "none" ], "out" => [ "in_r3" ] },
+ "emit" => '. xor %ia32_emit_binop /* Xor(%A1, %A2) -> %D1 */'
+},
+
+"Max" => {
+ "irn_flags" => "R",
+ "comment" => "construct Max: Max(a, b) = Max(b, a) = a > b ? a : b",
+ "reg_req" => { "in" => [ "gp", "gp" ], "out" => [ "in_r1" ] },
+ "emit" =>
+'2. cmp %S1, %S2 /* prepare Max (%S1 - %S2), (%A1, %A2) */
+ if (mode_is_signed(get_irn_mode(n))) {
+4. cmovl %D1, %S2 /* %S1 is less %S2 */
+ }
+ else {
+4. cmovb %D1, %S2 /* %S1 is below %S2 */
+ }
+'
+},
+
+"Min" => {
+ "irn_flags" => "R",
+ "comment" => "construct Min: Min(a, b) = Min(b, a) = a < b ? a : b",
+ "reg_req" => { "in" => [ "gp", "gp" ], "out" => [ "in_r1" ] },
+ "emit" =>
+'2. cmp %S1, %S2 /* prepare Min (%S1 - %S2), (%A1, %A2) */
+ if (mode_is_signed(get_irn_mode(n))) {
+2. cmovg %D1, %S2 /* %S1 is greater %S2 */
+ }
+ else {
+2. cmova %D1, %S2, %D1 /* %S1 is above %S2 */
+ }
+'
+},
+
+"CMov" => {
+ "irn_flags" => "R",
+ "comment" => "construct Mux: Mux(sel, a, b) == sel ? a : b",
+ "reg_req" => { "in" => [ "gp", "gp", "gp" ], "out" => [ "in_r2" ] },
+ "emit" =>
+'. cmp %S1, 0 /* compare Sel for CMov (%A2, %A3) */
+. cmovne %D1, %S3 /* sel == true -> return %S3 */
+'