+
+ 0x34: unpkbw({{
+ Rc = (Rb_uq<7:0>
+ | (Rb_uq<15:8> << 16)
+ | (Rb_uq<23:16> << 32)
+ | (Rb_uq<31:24> << 48));
+ }}, IntAluOp);
+
+ 0x35: unpkbl({{
+ Rc = (Rb_uq<7:0> | (Rb_uq<15:8> << 32));
+ }}, IntAluOp);
+
+ 0x36: pkwb({{
+ Rc = (Rb_uq<7:0>
+ | (Rb_uq<23:16> << 8)
+ | (Rb_uq<39:32> << 16)
+ | (Rb_uq<55:48> << 24));
+ }}, IntAluOp);
+
+ 0x37: pklb({{
+ Rc = (Rb_uq<7:0> | (Rb_uq<39:32> << 8));
+ }}, IntAluOp);
+
+ 0x38: minsb8({{
+ uint64_t temp = 0;
+ int hi = 63;
+ int lo = 56;
+ for (int i = 7; i >= 0; --i) {
+ int8_t ra_sb = Ra_uq<hi:lo>;
+ int8_t rb_sb = Rb_uq<hi:lo>;
+ temp = ((temp << 8)
+ | ((ra_sb < rb_sb) ? Ra_uq<hi:lo>
+ : Rb_uq<hi:lo>));
+ hi -= 8;
+ lo -= 8;
+ }
+ Rc = temp;
+ }});
+
+ 0x39: minsw4({{
+ uint64_t temp = 0;
+ int hi = 63;
+ int lo = 48;
+ for (int i = 3; i >= 0; --i) {
+ int16_t ra_sw = Ra_uq<hi:lo>;
+ int16_t rb_sw = Rb_uq<hi:lo>;
+ temp = ((temp << 16)
+ | ((ra_sw < rb_sw) ? Ra_uq<hi:lo>
+ : Rb_uq<hi:lo>));
+ hi -= 16;
+ lo -= 16;
+ }
+ Rc = temp;
+ }});
+
+ 0x3a: minub8({{
+ uint64_t temp = 0;
+ int hi = 63;
+ int lo = 56;
+ for (int i = 7; i >= 0; --i) {
+ uint8_t ra_ub = Ra_uq<hi:lo>;
+ uint8_t rb_ub = Rb_uq<hi:lo>;
+ temp = ((temp << 8)
+ | ((ra_ub < rb_ub) ? Ra_uq<hi:lo>
+ : Rb_uq<hi:lo>));
+ hi -= 8;
+ lo -= 8;
+ }
+ Rc = temp;
+ }});
+
+ 0x3b: minuw4({{
+ uint64_t temp = 0;
+ int hi = 63;
+ int lo = 48;
+ for (int i = 3; i >= 0; --i) {
+ uint16_t ra_sw = Ra_uq<hi:lo>;
+ uint16_t rb_sw = Rb_uq<hi:lo>;
+ temp = ((temp << 16)
+ | ((ra_sw < rb_sw) ? Ra_uq<hi:lo>
+ : Rb_uq<hi:lo>));
+ hi -= 16;
+ lo -= 16;
+ }
+ Rc = temp;
+ }});
+
+ 0x3c: maxub8({{
+ uint64_t temp = 0;
+ int hi = 63;
+ int lo = 56;
+ for (int i = 7; i >= 0; --i) {
+ uint8_t ra_ub = Ra_uq<hi:lo>;
+ uint8_t rb_ub = Rb_uq<hi:lo>;
+ temp = ((temp << 8)
+ | ((ra_ub > rb_ub) ? Ra_uq<hi:lo>
+ : Rb_uq<hi:lo>));
+ hi -= 8;
+ lo -= 8;
+ }
+ Rc = temp;
+ }});
+
+ 0x3d: maxuw4({{
+ uint64_t temp = 0;
+ int hi = 63;
+ int lo = 48;
+ for (int i = 3; i >= 0; --i) {
+ uint16_t ra_uw = Ra_uq<hi:lo>;
+ uint16_t rb_uw = Rb_uq<hi:lo>;
+ temp = ((temp << 16)
+ | ((ra_uw > rb_uw) ? Ra_uq<hi:lo>
+ : Rb_uq<hi:lo>));
+ hi -= 16;
+ lo -= 16;
+ }
+ Rc = temp;
+ }});
+
+ 0x3e: maxsb8({{
+ uint64_t temp = 0;
+ int hi = 63;
+ int lo = 56;
+ for (int i = 7; i >= 0; --i) {
+ int8_t ra_sb = Ra_uq<hi:lo>;
+ int8_t rb_sb = Rb_uq<hi:lo>;
+ temp = ((temp << 8)
+ | ((ra_sb > rb_sb) ? Ra_uq<hi:lo>
+ : Rb_uq<hi:lo>));
+ hi -= 8;
+ lo -= 8;
+ }
+ Rc = temp;
+ }});
+
+ 0x3f: maxsw4({{
+ uint64_t temp = 0;
+ int hi = 63;
+ int lo = 48;
+ for (int i = 3; i >= 0; --i) {
+ int16_t ra_sw = Ra_uq<hi:lo>;
+ int16_t rb_sw = Rb_uq<hi:lo>;
+ temp = ((temp << 16)
+ | ((ra_sw > rb_sw) ? Ra_uq<hi:lo>
+ : Rb_uq<hi:lo>));
+ hi -= 16;
+ lo -= 16;
+ }
+ Rc = temp;
+ }});