< prev index next >

src/hotspot/cpu/s390/assembler_s390.hpp

Print this page




 565 
 566 #define LRVH_ZOPC   (unsigned long)(0xe3L << 40 | 0x1fL)
 567 #define LRV_ZOPC    (unsigned long)(0xe3L << 40 | 0x1eL)
 568 #define LRVG_ZOPC   (unsigned long)(0xe3L << 40 | 0x0fL)
 569 
 570 
 571 // LOAD relative: memory to register transfer
 572 #define LHRL_ZOPC   (unsigned long)(0xc4L << 40 | 0x05L << 32)  // z10
 573 #define LRL_ZOPC    (unsigned long)(0xc4L << 40 | 0x0dL << 32)  // z10
 574 #define LGHRL_ZOPC  (unsigned long)(0xc4L << 40 | 0x04L << 32)  // z10
 575 #define LGFRL_ZOPC  (unsigned long)(0xc4L << 40 | 0x0cL << 32)  // z10
 576 #define LGRL_ZOPC   (unsigned long)(0xc4L << 40 | 0x08L << 32)  // z10
 577 
 578 #define LLHRL_ZOPC  (unsigned long)(0xc4L << 40 | 0x02L << 32)  // z10
 579 #define LLGHRL_ZOPC (unsigned long)(0xc4L << 40 | 0x06L << 32)  // z10
 580 #define LLGFRL_ZOPC (unsigned long)(0xc4L << 40 | 0x0eL << 32)  // z10
 581 
 582 #define LOC_ZOPC    (unsigned long)(0xebL << 40 | 0xf2L)        // z196
 583 #define LOCG_ZOPC   (unsigned long)(0xebL << 40 | 0xe2L)        // z196
 584 
 585 #define LMG_ZOPC    (unsigned long)(235L << 40 | 4L)




 586 
 587 #define LE_ZOPC     (unsigned  int)(0x78 << 24)
 588 #define LEY_ZOPC    (unsigned long)(237L << 40 | 100L)
 589 #define LDEB_ZOPC   (unsigned long)(237L << 40 | 4)
 590 #define LD_ZOPC     (unsigned  int)(0x68 << 24)
 591 #define LDY_ZOPC    (unsigned long)(237L << 40 | 101L)
 592 #define LXEB_ZOPC   (unsigned long)(237L << 40 | 6)
 593 #define LXDB_ZOPC   (unsigned long)(237L << 40 | 5)
 594 
 595 // STORE: register to memory transfer
 596 #define STC_ZOPC    (unsigned  int)(0x42 << 24)
 597 #define STCY_ZOPC   (unsigned long)(227L << 40 | 114L)
 598 #define STH_ZOPC    (unsigned  int)(64 << 24)
 599 #define STHY_ZOPC   (unsigned long)(227L << 40 | 112L)
 600 #define ST_ZOPC     (unsigned  int)(80 << 24)
 601 #define STY_ZOPC    (unsigned long)(227L << 40 | 80L)
 602 #define STG_ZOPC    (unsigned long)(227L << 40 | 36L)
 603 
 604 #define STCM_ZOPC   (unsigned long)(0xbeL << 24)
 605 #define STCMY_ZOPC  (unsigned long)(0xebL << 40 | 0x2dL)
 606 #define STCMH_ZOPC  (unsigned long)(0xebL << 40 | 0x2cL)
 607 
 608 // STORE relative: memory to register transfer
 609 #define STHRL_ZOPC  (unsigned long)(0xc4L << 40 | 0x07L << 32)  // z10
 610 #define STRL_ZOPC   (unsigned long)(0xc4L << 40 | 0x0fL << 32)  // z10
 611 #define STGRL_ZOPC  (unsigned long)(0xc4L << 40 | 0x0bL << 32)  // z10
 612 
 613 #define STOC_ZOPC   (unsigned long)(0xebL << 40 | 0xf3L)        // z196
 614 #define STOCG_ZOPC  (unsigned long)(0xebL << 40 | 0xe3L)        // z196
 615 
 616 #define STMG_ZOPC   (unsigned long)(235L << 40 | 36L)



 617 
 618 #define STE_ZOPC    (unsigned  int)(0x70 << 24)
 619 #define STEY_ZOPC   (unsigned long)(237L << 40 | 102L)
 620 #define STD_ZOPC    (unsigned  int)(0x60 << 24)
 621 #define STDY_ZOPC   (unsigned long)(237L << 40 | 103L)
 622 
 623 // MOVE: immediate to memory transfer
 624 #define MVHHI_ZOPC  (unsigned long)(0xe5L << 40 | 0x44L << 32)   // z10
 625 #define MVHI_ZOPC   (unsigned long)(0xe5L << 40 | 0x4cL << 32)   // z10
 626 #define MVGHI_ZOPC  (unsigned long)(0xe5L << 40 | 0x48L << 32)   // z10
 627 
 628 
 629 //  ALU operations
 630 
 631 // Load Positive
 632 #define LPR_ZOPC    (unsigned  int)(16 << 8)
 633 #define LPGFR_ZOPC  (unsigned  int)(185 << 24 | 16 << 16)
 634 #define LPGR_ZOPC   (unsigned  int)(185 << 24)
 635 #define LPEBR_ZOPC  (unsigned  int)(179 << 24)
 636 #define LPDBR_ZOPC  (unsigned  int)(179 << 24 | 16 << 16)


 857 #define CL_ZOPC     (unsigned  int)(0x55 << 24)
 858 #define CLY_ZOPC    (unsigned long)(227L << 40 | 85L)
 859 #define CLGF_ZOPC   (unsigned long)(227L << 40 | 49L)
 860 #define CLG_ZOPC    (unsigned long)(227L << 40 | 33L)
 861 // RI, unsigned
 862 #define TMHH_ZOPC   (unsigned  int)(167 << 24 | 2 << 16)
 863 #define TMHL_ZOPC   (unsigned  int)(167 << 24 | 3 << 16)
 864 #define TMLH_ZOPC   (unsigned  int)(167 << 24)
 865 #define TMLL_ZOPC   (unsigned  int)(167 << 24 | 1 << 16)
 866 
 867 // RR, BFP
 868 #define CEBR_ZOPC   (unsigned  int)(179 << 24 | 9 << 16)
 869 #define CDBR_ZOPC   (unsigned  int)(179 << 24 | 25 << 16)
 870 #define CXBR_ZOPC   (unsigned  int)(179 << 24 | 73 << 16)
 871 // RM, BFP
 872 #define CEB_ZOPC    (unsigned long)(237L << 40 | 9)
 873 #define CDB_ZOPC    (unsigned long)(237L << 40 | 25)
 874 
 875 // Shift
 876 // arithmetic
 877 #define SLA_ZOPC    (unsigned  int)(139 << 24)
 878 #define SLAG_ZOPC   (unsigned long)(235L << 40 | 11L)
 879 #define SRA_ZOPC    (unsigned  int)(138 << 24)
 880 #define SRAG_ZOPC   (unsigned long)(235L << 40 | 10L)


 881 // logical
 882 #define SLL_ZOPC    (unsigned  int)(137 << 24)
 883 #define SLLG_ZOPC   (unsigned long)(235L << 40 | 13L)
 884 #define SRL_ZOPC    (unsigned  int)(136 << 24)
 885 #define SRLG_ZOPC   (unsigned long)(235L << 40 | 12L)


 886 
 887 // Rotate, then AND/XOR/OR/insert
 888 // rotate
 889 #define RLL_ZOPC    (unsigned long)(0xebL << 40 | 0x1dL)         // z10
 890 #define RLLG_ZOPC   (unsigned long)(0xebL << 40 | 0x1cL)         // z10
 891 // rotate and {AND|XOR|OR|INS}
 892 #define RNSBG_ZOPC  (unsigned long)(0xecL << 40 | 0x54L)         // z196
 893 #define RXSBG_ZOPC  (unsigned long)(0xecL << 40 | 0x57L)         // z196
 894 #define ROSBG_ZOPC  (unsigned long)(0xecL << 40 | 0x56L)         // z196
 895 #define RISBG_ZOPC  (unsigned long)(0xecL << 40 | 0x55L)         // z196
 896 
 897 // AND
 898 // RR, signed
 899 #define NR_ZOPC     (unsigned  int)(20 << 8)
 900 #define NGR_ZOPC    (unsigned  int)(185 << 24 | 128 << 16)
 901 // RRF, signed
 902 #define NRK_ZOPC    (unsigned  int)(0xb9 << 24 | 0x00f4 << 16)
 903 #define NGRK_ZOPC   (unsigned  int)(0xb9 << 24 | 0x00e4 << 16)
 904 // RI, signed
 905 #define NIHH_ZOPC   (unsigned  int)(165 << 24 | 4 << 16)


2245   inline void z_oilf(Register r1, int64_t i2);                // or r1 = r1 | i2_imm32   ; or only for bits 32-63
2246 
2247   // xor
2248   inline void z_x(   Register r1, int64_t d2, Register x2, Register b2);
2249   inline void z_xy(  Register r1, int64_t d2, Register x2, Register b2);
2250   inline void z_xg(  Register r1, int64_t d2, Register x2, Register b2);
2251   inline void z_x(   Register r1, const Address& a);
2252   inline void z_xy(  Register r1, const Address& a);
2253   inline void z_xg(  Register r1, const Address& a);
2254 
2255   inline void z_xr(  Register r1, Register r2);               // xor r1 = r1 ^ r2         ; int32
2256   inline void z_xgr( Register r1, Register r2);               // xor r1 = r1 ^ r2         ; int64
2257   inline void z_xrk( Register r1, Register r2, Register r3);  // xor r1 = r2 ^ r3         ; int32
2258   inline void z_xgrk(Register r1, Register r2, Register r3);  // xor r1 = r2 ^ r3         ; int64
2259 
2260   inline void z_xihf(Register r1, int64_t i2);                // xor r1 = r1 ^ i2_imm32   ; or only for bits  0-31
2261   inline void z_xilf(Register r1, int64_t i2);                // xor r1 = r1 ^ i2_imm32   ; or only for bits 32-63
2262 
2263   // shift
2264   inline void z_sla( Register r1,              int64_t d2, Register b2=Z_R0); // shift left  r1 = r1 << ((d2+b2)&0x3f) ; int32, only 31 bits shifted, sign preserved!

2265   inline void z_slag(Register r1, Register r3, int64_t d2, Register b2=Z_R0); // shift left  r1 = r3 << ((d2+b2)&0x3f) ; int64, only 63 bits shifted, sign preserved!
2266   inline void z_sra( Register r1,              int64_t d2, Register b2=Z_R0); // shift right r1 = r1 >> ((d2+b2)&0x3f) ; int32, sign extended

2267   inline void z_srag(Register r1, Register r3, int64_t d2, Register b2=Z_R0); // shift right r1 = r3 >> ((d2+b2)&0x3f) ; int64, sign extended
2268   inline void z_sll( Register r1,              int64_t d2, Register b2=Z_R0); // shift left  r1 = r1 << ((d2+b2)&0x3f) ; int32, zeros added

2269   inline void z_sllg(Register r1, Register r3, int64_t d2, Register b2=Z_R0); // shift left  r1 = r3 << ((d2+b2)&0x3f) ; int64, zeros added
2270   inline void z_srl( Register r1,              int64_t d2, Register b2=Z_R0); // shift right r1 = r1 >> ((d2+b2)&0x3f) ; int32, zero extended

2271   inline void z_srlg(Register r1, Register r3, int64_t d2, Register b2=Z_R0); // shift right r1 = r3 >> ((d2+b2)&0x3f) ; int64, zero extended
2272 
2273   // rotate
2274   inline void z_rll( Register r1, Register r3, int64_t d2, Register b2=Z_R0); // rot r1 = r3 << (d2+b2 & 0x3f) ; int32  -- z10
2275   inline void z_rllg(Register r1, Register r3, int64_t d2, Register b2=Z_R0); // rot r1 = r3 << (d2+b2 & 0x3f) ; int64  -- z10
2276 
2277   // rotate the AND/XOR/OR/insert
2278   inline void z_rnsbg( Register r1, Register r2, int64_t spos3, int64_t epos4, int64_t nrot5, bool test_only = false); // rotate then AND selected bits  -- z196
2279   inline void z_rxsbg( Register r1, Register r2, int64_t spos3, int64_t epos4, int64_t nrot5, bool test_only = false); // rotate then XOR selected bits  -- z196
2280   inline void z_rosbg( Register r1, Register r2, int64_t spos3, int64_t epos4, int64_t nrot5, bool test_only = false); // rotate then OR  selected bits  -- z196
2281   inline void z_risbg( Register r1, Register r2, int64_t spos3, int64_t epos4, int64_t nrot5, bool zero_rest = false); // rotate then INS selected bits  -- z196
2282 
2283 
2284   // memory-immediate instructions (8-bit immediate)
2285   // ===============================================
2286 
2287   inline void z_cli( int64_t d1, Register b1, int64_t i2); // compare *(d1_imm12+b1) ^= i2_imm8           ; int8
2288   inline void z_mvi( int64_t d1, Register b1, int64_t i2); // store   *(d1_imm12+b1)  = i2_imm8           ; int8
2289   inline void z_tm(  int64_t d1, Register b1, int64_t i2); // test    *(d1_imm12+b1) against mask i2_imm8 ; int8
2290   inline void z_ni(  int64_t d1, Register b1, int64_t i2); // store   *(d1_imm12+b1) &= i2_imm8           ; int8


3018   inline void z_brxh(Register r1, Register r3, address a);
3019   inline void z_brxh(Register r1, Register r3, Label& L);
3020 
3021   inline void z_brxle(Register r1, Register r3, address a);
3022   inline void z_brxle(Register r1, Register r3, Label& L);
3023 
3024   inline void z_brxhg(Register r1, Register r3, address a);
3025   inline void z_brxhg(Register r1, Register r3, Label& L);
3026 
3027   inline void z_brxlg(Register r1, Register r3, address a);
3028   inline void z_brxlg(Register r1, Register r3, Label& L);
3029 
3030   // Ppopulation count intrinsics.
3031   inline void z_flogr(Register r1, Register r2);    // find leftmost one
3032   inline void z_popcnt(Register r1, Register r2);   // population count
3033   inline void z_ahhhr(Register r1, Register r2, Register r3);   // ADD halfword high high
3034   inline void z_ahhlr(Register r1, Register r2, Register r3);   // ADD halfword high low
3035 
3036   inline void z_tam();
3037   inline void z_stckf(int64_t d2, Register b2);


3038   inline void z_stmg(Register r1, Register r3, int64_t d2, Register b2);


3039   inline void z_lmg(Register r1, Register r3, int64_t d2, Register b2);
3040 
3041   inline void z_cs( Register r1, Register r3, int64_t d2, Register b2);
3042   inline void z_csy(Register r1, Register r3, int64_t d2, Register b2);
3043   inline void z_csg(Register r1, Register r3, int64_t d2, Register b2);
3044   inline void z_cs( Register r1, Register r3, const Address& a);
3045   inline void z_csy(Register r1, Register r3, const Address& a);
3046   inline void z_csg(Register r1, Register r3, const Address& a);
3047 
3048   inline void z_cvd(Register r1, int64_t d2, Register x2, Register b2);
3049   inline void z_cvdg(Register r1, int64_t d2, Register x2, Register b2);
3050   inline void z_cvd(Register r1, int64_t d2, Register b2);
3051   inline void z_cvdg(Register r1, int64_t d2, Register b2);
3052 
3053   // Instruction queries:
3054   // instruction properties and recognize emitted instructions
3055   // ===========================================================
3056 
3057   static int nop_size() { return 2; }
3058 




 565 
 566 #define LRVH_ZOPC   (unsigned long)(0xe3L << 40 | 0x1fL)
 567 #define LRV_ZOPC    (unsigned long)(0xe3L << 40 | 0x1eL)
 568 #define LRVG_ZOPC   (unsigned long)(0xe3L << 40 | 0x0fL)
 569 
 570 
 571 // LOAD relative: memory to register transfer
 572 #define LHRL_ZOPC   (unsigned long)(0xc4L << 40 | 0x05L << 32)  // z10
 573 #define LRL_ZOPC    (unsigned long)(0xc4L << 40 | 0x0dL << 32)  // z10
 574 #define LGHRL_ZOPC  (unsigned long)(0xc4L << 40 | 0x04L << 32)  // z10
 575 #define LGFRL_ZOPC  (unsigned long)(0xc4L << 40 | 0x0cL << 32)  // z10
 576 #define LGRL_ZOPC   (unsigned long)(0xc4L << 40 | 0x08L << 32)  // z10
 577 
 578 #define LLHRL_ZOPC  (unsigned long)(0xc4L << 40 | 0x02L << 32)  // z10
 579 #define LLGHRL_ZOPC (unsigned long)(0xc4L << 40 | 0x06L << 32)  // z10
 580 #define LLGFRL_ZOPC (unsigned long)(0xc4L << 40 | 0x0eL << 32)  // z10
 581 
 582 #define LOC_ZOPC    (unsigned long)(0xebL << 40 | 0xf2L)        // z196
 583 #define LOCG_ZOPC   (unsigned long)(0xebL << 40 | 0xe2L)        // z196
 584 
 585 
 586 // LOAD multiple registers at once
 587 #define LM_ZOPC     (unsigned  int)(0x98  << 24)
 588 #define LMY_ZOPC    (unsigned long)(0xebL << 40 | 0x98L)
 589 #define LMG_ZOPC    (unsigned long)(0xebL << 40 | 0x04L)
 590 
 591 #define LE_ZOPC     (unsigned  int)(0x78 << 24)
 592 #define LEY_ZOPC    (unsigned long)(237L << 40 | 100L)
 593 #define LDEB_ZOPC   (unsigned long)(237L << 40 | 4)
 594 #define LD_ZOPC     (unsigned  int)(0x68 << 24)
 595 #define LDY_ZOPC    (unsigned long)(237L << 40 | 101L)
 596 #define LXEB_ZOPC   (unsigned long)(237L << 40 | 6)
 597 #define LXDB_ZOPC   (unsigned long)(237L << 40 | 5)
 598 
 599 // STORE: register to memory transfer
 600 #define STC_ZOPC    (unsigned  int)(0x42 << 24)
 601 #define STCY_ZOPC   (unsigned long)(227L << 40 | 114L)
 602 #define STH_ZOPC    (unsigned  int)(64 << 24)
 603 #define STHY_ZOPC   (unsigned long)(227L << 40 | 112L)
 604 #define ST_ZOPC     (unsigned  int)(80 << 24)
 605 #define STY_ZOPC    (unsigned long)(227L << 40 | 80L)
 606 #define STG_ZOPC    (unsigned long)(227L << 40 | 36L)
 607 
 608 #define STCM_ZOPC   (unsigned long)(0xbeL << 24)
 609 #define STCMY_ZOPC  (unsigned long)(0xebL << 40 | 0x2dL)
 610 #define STCMH_ZOPC  (unsigned long)(0xebL << 40 | 0x2cL)
 611 
 612 // STORE relative: memory to register transfer
 613 #define STHRL_ZOPC  (unsigned long)(0xc4L << 40 | 0x07L << 32)  // z10
 614 #define STRL_ZOPC   (unsigned long)(0xc4L << 40 | 0x0fL << 32)  // z10
 615 #define STGRL_ZOPC  (unsigned long)(0xc4L << 40 | 0x0bL << 32)  // z10
 616 
 617 #define STOC_ZOPC   (unsigned long)(0xebL << 40 | 0xf3L)        // z196
 618 #define STOCG_ZOPC  (unsigned long)(0xebL << 40 | 0xe3L)        // z196
 619 
 620 // STORE multiple registers at once
 621 #define STM_ZOPC    (unsigned  int)(0x90  << 24)
 622 #define STMY_ZOPC   (unsigned long)(0xebL << 40 | 0x90L)
 623 #define STMG_ZOPC   (unsigned long)(0xebL << 40 | 0x24L)
 624 
 625 #define STE_ZOPC    (unsigned  int)(0x70 << 24)
 626 #define STEY_ZOPC   (unsigned long)(237L << 40 | 102L)
 627 #define STD_ZOPC    (unsigned  int)(0x60 << 24)
 628 #define STDY_ZOPC   (unsigned long)(237L << 40 | 103L)
 629 
 630 // MOVE: immediate to memory transfer
 631 #define MVHHI_ZOPC  (unsigned long)(0xe5L << 40 | 0x44L << 32)   // z10
 632 #define MVHI_ZOPC   (unsigned long)(0xe5L << 40 | 0x4cL << 32)   // z10
 633 #define MVGHI_ZOPC  (unsigned long)(0xe5L << 40 | 0x48L << 32)   // z10
 634 
 635 
 636 //  ALU operations
 637 
 638 // Load Positive
 639 #define LPR_ZOPC    (unsigned  int)(16 << 8)
 640 #define LPGFR_ZOPC  (unsigned  int)(185 << 24 | 16 << 16)
 641 #define LPGR_ZOPC   (unsigned  int)(185 << 24)
 642 #define LPEBR_ZOPC  (unsigned  int)(179 << 24)
 643 #define LPDBR_ZOPC  (unsigned  int)(179 << 24 | 16 << 16)


 864 #define CL_ZOPC     (unsigned  int)(0x55 << 24)
 865 #define CLY_ZOPC    (unsigned long)(227L << 40 | 85L)
 866 #define CLGF_ZOPC   (unsigned long)(227L << 40 | 49L)
 867 #define CLG_ZOPC    (unsigned long)(227L << 40 | 33L)
 868 // RI, unsigned
 869 #define TMHH_ZOPC   (unsigned  int)(167 << 24 | 2 << 16)
 870 #define TMHL_ZOPC   (unsigned  int)(167 << 24 | 3 << 16)
 871 #define TMLH_ZOPC   (unsigned  int)(167 << 24)
 872 #define TMLL_ZOPC   (unsigned  int)(167 << 24 | 1 << 16)
 873 
 874 // RR, BFP
 875 #define CEBR_ZOPC   (unsigned  int)(179 << 24 | 9 << 16)
 876 #define CDBR_ZOPC   (unsigned  int)(179 << 24 | 25 << 16)
 877 #define CXBR_ZOPC   (unsigned  int)(179 << 24 | 73 << 16)
 878 // RM, BFP
 879 #define CEB_ZOPC    (unsigned long)(237L << 40 | 9)
 880 #define CDB_ZOPC    (unsigned long)(237L << 40 | 25)
 881 
 882 // Shift
 883 // arithmetic
 884 #define SLA_ZOPC    (unsigned  int)(0x8b  << 24)
 885 #define SLAK_ZOPC   (unsigned long)(0xebL << 40 | 0xddL)
 886 #define SLAG_ZOPC   (unsigned long)(0xebL << 40 | 0x0bL)
 887 #define SRA_ZOPC    (unsigned  int)(0x8a  << 24)
 888 #define SRAK_ZOPC   (unsigned long)(0xebL << 40 | 0xdcL)
 889 #define SRAG_ZOPC   (unsigned long)(0xebL << 40 | 0x0aL)
 890 // logical
 891 #define SLL_ZOPC    (unsigned  int)(0x89  << 24)
 892 #define SLLK_ZOPC   (unsigned long)(0xebL << 40 | 0xdfL)
 893 #define SLLG_ZOPC   (unsigned long)(0xebL << 40 | 0x0dL)
 894 #define SRL_ZOPC    (unsigned  int)(0x88  << 24)
 895 #define SRLK_ZOPC   (unsigned long)(0xebL << 40 | 0xdeL)
 896 #define SRLG_ZOPC   (unsigned long)(0xebL << 40 | 0x0cL)
 897 
 898 // Rotate, then AND/XOR/OR/insert
 899 // rotate
 900 #define RLL_ZOPC    (unsigned long)(0xebL << 40 | 0x1dL)         // z10
 901 #define RLLG_ZOPC   (unsigned long)(0xebL << 40 | 0x1cL)         // z10
 902 // rotate and {AND|XOR|OR|INS}
 903 #define RNSBG_ZOPC  (unsigned long)(0xecL << 40 | 0x54L)         // z196
 904 #define RXSBG_ZOPC  (unsigned long)(0xecL << 40 | 0x57L)         // z196
 905 #define ROSBG_ZOPC  (unsigned long)(0xecL << 40 | 0x56L)         // z196
 906 #define RISBG_ZOPC  (unsigned long)(0xecL << 40 | 0x55L)         // z196
 907 
 908 // AND
 909 // RR, signed
 910 #define NR_ZOPC     (unsigned  int)(20 << 8)
 911 #define NGR_ZOPC    (unsigned  int)(185 << 24 | 128 << 16)
 912 // RRF, signed
 913 #define NRK_ZOPC    (unsigned  int)(0xb9 << 24 | 0x00f4 << 16)
 914 #define NGRK_ZOPC   (unsigned  int)(0xb9 << 24 | 0x00e4 << 16)
 915 // RI, signed
 916 #define NIHH_ZOPC   (unsigned  int)(165 << 24 | 4 << 16)


2256   inline void z_oilf(Register r1, int64_t i2);                // or r1 = r1 | i2_imm32   ; or only for bits 32-63
2257 
2258   // xor
2259   inline void z_x(   Register r1, int64_t d2, Register x2, Register b2);
2260   inline void z_xy(  Register r1, int64_t d2, Register x2, Register b2);
2261   inline void z_xg(  Register r1, int64_t d2, Register x2, Register b2);
2262   inline void z_x(   Register r1, const Address& a);
2263   inline void z_xy(  Register r1, const Address& a);
2264   inline void z_xg(  Register r1, const Address& a);
2265 
2266   inline void z_xr(  Register r1, Register r2);               // xor r1 = r1 ^ r2         ; int32
2267   inline void z_xgr( Register r1, Register r2);               // xor r1 = r1 ^ r2         ; int64
2268   inline void z_xrk( Register r1, Register r2, Register r3);  // xor r1 = r2 ^ r3         ; int32
2269   inline void z_xgrk(Register r1, Register r2, Register r3);  // xor r1 = r2 ^ r3         ; int64
2270 
2271   inline void z_xihf(Register r1, int64_t i2);                // xor r1 = r1 ^ i2_imm32   ; or only for bits  0-31
2272   inline void z_xilf(Register r1, int64_t i2);                // xor r1 = r1 ^ i2_imm32   ; or only for bits 32-63
2273 
2274   // shift
2275   inline void z_sla( Register r1,              int64_t d2, Register b2=Z_R0); // shift left  r1 = r1 << ((d2+b2)&0x3f) ; int32, only 31 bits shifted, sign preserved!
2276   inline void z_slak(Register r1, Register r3, int64_t d2, Register b2=Z_R0); // shift left  r1 = r3 << ((d2+b2)&0x3f) ; int32, only 31 bits shifted, sign preserved!
2277   inline void z_slag(Register r1, Register r3, int64_t d2, Register b2=Z_R0); // shift left  r1 = r3 << ((d2+b2)&0x3f) ; int64, only 63 bits shifted, sign preserved!
2278   inline void z_sra( Register r1,              int64_t d2, Register b2=Z_R0); // shift right r1 = r1 >> ((d2+b2)&0x3f) ; int32, sign extended
2279   inline void z_srak(Register r1, Register r3, int64_t d2, Register b2=Z_R0); // shift right r1 = r3 >> ((d2+b2)&0x3f) ; int32, sign extended
2280   inline void z_srag(Register r1, Register r3, int64_t d2, Register b2=Z_R0); // shift right r1 = r3 >> ((d2+b2)&0x3f) ; int64, sign extended
2281   inline void z_sll( Register r1,              int64_t d2, Register b2=Z_R0); // shift left  r1 = r1 << ((d2+b2)&0x3f) ; int32, zeros added
2282   inline void z_sllk(Register r1, Register r3, int64_t d2, Register b2=Z_R0); // shift left  r1 = r3 << ((d2+b2)&0x3f) ; int32, zeros added
2283   inline void z_sllg(Register r1, Register r3, int64_t d2, Register b2=Z_R0); // shift left  r1 = r3 << ((d2+b2)&0x3f) ; int64, zeros added
2284   inline void z_srl( Register r1,              int64_t d2, Register b2=Z_R0); // shift right r1 = r1 >> ((d2+b2)&0x3f) ; int32, zero extended
2285   inline void z_srlk(Register r1, Register r3, int64_t d2, Register b2=Z_R0); // shift right r1 = r3 >> ((d2+b2)&0x3f) ; int32, zero extended
2286   inline void z_srlg(Register r1, Register r3, int64_t d2, Register b2=Z_R0); // shift right r1 = r3 >> ((d2+b2)&0x3f) ; int64, zero extended
2287 
2288   // rotate
2289   inline void z_rll( Register r1, Register r3, int64_t d2, Register b2=Z_R0); // rot r1 = r3 << (d2+b2 & 0x3f) ; int32  -- z10
2290   inline void z_rllg(Register r1, Register r3, int64_t d2, Register b2=Z_R0); // rot r1 = r3 << (d2+b2 & 0x3f) ; int64  -- z10
2291 
2292   // rotate the AND/XOR/OR/insert
2293   inline void z_rnsbg( Register r1, Register r2, int64_t spos3, int64_t epos4, int64_t nrot5, bool test_only = false); // rotate then AND selected bits  -- z196
2294   inline void z_rxsbg( Register r1, Register r2, int64_t spos3, int64_t epos4, int64_t nrot5, bool test_only = false); // rotate then XOR selected bits  -- z196
2295   inline void z_rosbg( Register r1, Register r2, int64_t spos3, int64_t epos4, int64_t nrot5, bool test_only = false); // rotate then OR  selected bits  -- z196
2296   inline void z_risbg( Register r1, Register r2, int64_t spos3, int64_t epos4, int64_t nrot5, bool zero_rest = false); // rotate then INS selected bits  -- z196
2297 
2298 
2299   // memory-immediate instructions (8-bit immediate)
2300   // ===============================================
2301 
2302   inline void z_cli( int64_t d1, Register b1, int64_t i2); // compare *(d1_imm12+b1) ^= i2_imm8           ; int8
2303   inline void z_mvi( int64_t d1, Register b1, int64_t i2); // store   *(d1_imm12+b1)  = i2_imm8           ; int8
2304   inline void z_tm(  int64_t d1, Register b1, int64_t i2); // test    *(d1_imm12+b1) against mask i2_imm8 ; int8
2305   inline void z_ni(  int64_t d1, Register b1, int64_t i2); // store   *(d1_imm12+b1) &= i2_imm8           ; int8


3033   inline void z_brxh(Register r1, Register r3, address a);
3034   inline void z_brxh(Register r1, Register r3, Label& L);
3035 
3036   inline void z_brxle(Register r1, Register r3, address a);
3037   inline void z_brxle(Register r1, Register r3, Label& L);
3038 
3039   inline void z_brxhg(Register r1, Register r3, address a);
3040   inline void z_brxhg(Register r1, Register r3, Label& L);
3041 
3042   inline void z_brxlg(Register r1, Register r3, address a);
3043   inline void z_brxlg(Register r1, Register r3, Label& L);
3044 
3045   // Ppopulation count intrinsics.
3046   inline void z_flogr(Register r1, Register r2);    // find leftmost one
3047   inline void z_popcnt(Register r1, Register r2);   // population count
3048   inline void z_ahhhr(Register r1, Register r2, Register r3);   // ADD halfword high high
3049   inline void z_ahhlr(Register r1, Register r2, Register r3);   // ADD halfword high low
3050 
3051   inline void z_tam();
3052   inline void z_stckf(int64_t d2, Register b2);
3053   inline void z_stm( Register r1, Register r3, int64_t d2, Register b2);
3054   inline void z_stmy(Register r1, Register r3, int64_t d2, Register b2);
3055   inline void z_stmg(Register r1, Register r3, int64_t d2, Register b2);
3056   inline void z_lm( Register r1, Register r3, int64_t d2, Register b2);
3057   inline void z_lmy(Register r1, Register r3, int64_t d2, Register b2);
3058   inline void z_lmg(Register r1, Register r3, int64_t d2, Register b2);
3059 
3060   inline void z_cs( Register r1, Register r3, int64_t d2, Register b2);
3061   inline void z_csy(Register r1, Register r3, int64_t d2, Register b2);
3062   inline void z_csg(Register r1, Register r3, int64_t d2, Register b2);
3063   inline void z_cs( Register r1, Register r3, const Address& a);
3064   inline void z_csy(Register r1, Register r3, const Address& a);
3065   inline void z_csg(Register r1, Register r3, const Address& a);
3066 
3067   inline void z_cvd(Register r1, int64_t d2, Register x2, Register b2);
3068   inline void z_cvdg(Register r1, int64_t d2, Register x2, Register b2);
3069   inline void z_cvd(Register r1, int64_t d2, Register b2);
3070   inline void z_cvdg(Register r1, int64_t d2, Register b2);
3071 
3072   // Instruction queries:
3073   // instruction properties and recognize emitted instructions
3074   // ===========================================================
3075 
3076   static int nop_size() { return 2; }
3077 


< prev index next >