Isaku Yamahata | e92e8c6 | 2008-05-19 22:13:36 +0900 | [diff] [blame] | 1 | /****************************************************************************** |
Tony Luck | 7f30491 | 2008-08-01 10:13:32 -0700 | [diff] [blame] | 2 | * arch/ia64/include/asm/native/inst.h |
Isaku Yamahata | e92e8c6 | 2008-05-19 22:13:36 +0900 | [diff] [blame] | 3 | * |
| 4 | * Copyright (c) 2008 Isaku Yamahata <yamahata at valinux co jp> |
| 5 | * VA Linux Systems Japan K.K. |
| 6 | * |
| 7 | * This program is free software; you can redistribute it and/or modify |
| 8 | * it under the terms of the GNU General Public License as published by |
| 9 | * the Free Software Foundation; either version 2 of the License, or |
| 10 | * (at your option) any later version. |
| 11 | * |
| 12 | * This program is distributed in the hope that it will be useful, |
| 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 15 | * GNU General Public License for more details. |
| 16 | * |
| 17 | * You should have received a copy of the GNU General Public License |
| 18 | * along with this program; if not, write to the Free Software |
| 19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| 20 | * |
| 21 | */ |
| 22 | |
Isaku Yamahata | 02e32e3 | 2008-05-19 22:13:37 +0900 | [diff] [blame] | 23 | #define DO_SAVE_MIN IA64_NATIVE_DO_SAVE_MIN |
| 24 | |
Isaku Yamahata | e92e8c6 | 2008-05-19 22:13:36 +0900 | [diff] [blame] | 25 | #define MOV_FROM_IFA(reg) \ |
| 26 | mov reg = cr.ifa |
| 27 | |
| 28 | #define MOV_FROM_ITIR(reg) \ |
| 29 | mov reg = cr.itir |
| 30 | |
| 31 | #define MOV_FROM_ISR(reg) \ |
| 32 | mov reg = cr.isr |
| 33 | |
| 34 | #define MOV_FROM_IHA(reg) \ |
| 35 | mov reg = cr.iha |
| 36 | |
| 37 | #define MOV_FROM_IPSR(pred, reg) \ |
| 38 | (pred) mov reg = cr.ipsr |
| 39 | |
| 40 | #define MOV_FROM_IIM(reg) \ |
| 41 | mov reg = cr.iim |
| 42 | |
| 43 | #define MOV_FROM_IIP(reg) \ |
| 44 | mov reg = cr.iip |
| 45 | |
| 46 | #define MOV_FROM_IVR(reg, clob) \ |
Luis R. Rodriguez | e55645e | 2015-06-02 11:42:02 -0700 | [diff] [blame] | 47 | mov reg = cr.ivr |
Isaku Yamahata | e92e8c6 | 2008-05-19 22:13:36 +0900 | [diff] [blame] | 48 | |
| 49 | #define MOV_FROM_PSR(pred, reg, clob) \ |
Luis R. Rodriguez | e55645e | 2015-06-02 11:42:02 -0700 | [diff] [blame] | 50 | (pred) mov reg = psr |
Isaku Yamahata | e92e8c6 | 2008-05-19 22:13:36 +0900 | [diff] [blame] | 51 | |
Isaku Yamahata | 94752a7 | 2009-03-04 21:05:38 +0900 | [diff] [blame] | 52 | #define MOV_FROM_ITC(pred, pred_clob, reg, clob) \ |
Luis R. Rodriguez | e55645e | 2015-06-02 11:42:02 -0700 | [diff] [blame] | 53 | (pred) mov reg = ar.itc |
Isaku Yamahata | 94752a7 | 2009-03-04 21:05:38 +0900 | [diff] [blame] | 54 | |
Isaku Yamahata | e92e8c6 | 2008-05-19 22:13:36 +0900 | [diff] [blame] | 55 | #define MOV_TO_IFA(reg, clob) \ |
Luis R. Rodriguez | e55645e | 2015-06-02 11:42:02 -0700 | [diff] [blame] | 56 | mov cr.ifa = reg |
Isaku Yamahata | e92e8c6 | 2008-05-19 22:13:36 +0900 | [diff] [blame] | 57 | |
| 58 | #define MOV_TO_ITIR(pred, reg, clob) \ |
Luis R. Rodriguez | e55645e | 2015-06-02 11:42:02 -0700 | [diff] [blame] | 59 | (pred) mov cr.itir = reg |
Isaku Yamahata | e92e8c6 | 2008-05-19 22:13:36 +0900 | [diff] [blame] | 60 | |
| 61 | #define MOV_TO_IHA(pred, reg, clob) \ |
Luis R. Rodriguez | e55645e | 2015-06-02 11:42:02 -0700 | [diff] [blame] | 62 | (pred) mov cr.iha = reg |
Isaku Yamahata | e92e8c6 | 2008-05-19 22:13:36 +0900 | [diff] [blame] | 63 | |
| 64 | #define MOV_TO_IPSR(pred, reg, clob) \ |
Luis R. Rodriguez | e55645e | 2015-06-02 11:42:02 -0700 | [diff] [blame] | 65 | (pred) mov cr.ipsr = reg |
Isaku Yamahata | e92e8c6 | 2008-05-19 22:13:36 +0900 | [diff] [blame] | 66 | |
| 67 | #define MOV_TO_IFS(pred, reg, clob) \ |
Luis R. Rodriguez | e55645e | 2015-06-02 11:42:02 -0700 | [diff] [blame] | 68 | (pred) mov cr.ifs = reg |
Isaku Yamahata | e92e8c6 | 2008-05-19 22:13:36 +0900 | [diff] [blame] | 69 | |
| 70 | #define MOV_TO_IIP(reg, clob) \ |
Luis R. Rodriguez | e55645e | 2015-06-02 11:42:02 -0700 | [diff] [blame] | 71 | mov cr.iip = reg |
Isaku Yamahata | e92e8c6 | 2008-05-19 22:13:36 +0900 | [diff] [blame] | 72 | |
| 73 | #define MOV_TO_KR(kr, reg, clob0, clob1) \ |
Luis R. Rodriguez | e55645e | 2015-06-02 11:42:02 -0700 | [diff] [blame] | 74 | mov IA64_KR(kr) = reg |
Isaku Yamahata | e92e8c6 | 2008-05-19 22:13:36 +0900 | [diff] [blame] | 75 | |
| 76 | #define ITC_I(pred, reg, clob) \ |
Luis R. Rodriguez | e55645e | 2015-06-02 11:42:02 -0700 | [diff] [blame] | 77 | (pred) itc.i reg |
Isaku Yamahata | e92e8c6 | 2008-05-19 22:13:36 +0900 | [diff] [blame] | 78 | |
| 79 | #define ITC_D(pred, reg, clob) \ |
Luis R. Rodriguez | e55645e | 2015-06-02 11:42:02 -0700 | [diff] [blame] | 80 | (pred) itc.d reg |
Isaku Yamahata | e92e8c6 | 2008-05-19 22:13:36 +0900 | [diff] [blame] | 81 | |
| 82 | #define ITC_I_AND_D(pred_i, pred_d, reg, clob) \ |
| 83 | (pred_i) itc.i reg; \ |
Luis R. Rodriguez | e55645e | 2015-06-02 11:42:02 -0700 | [diff] [blame] | 84 | (pred_d) itc.d reg |
Isaku Yamahata | e92e8c6 | 2008-05-19 22:13:36 +0900 | [diff] [blame] | 85 | |
| 86 | #define THASH(pred, reg0, reg1, clob) \ |
Luis R. Rodriguez | e55645e | 2015-06-02 11:42:02 -0700 | [diff] [blame] | 87 | (pred) thash reg0 = reg1 |
Isaku Yamahata | e92e8c6 | 2008-05-19 22:13:36 +0900 | [diff] [blame] | 88 | |
| 89 | #define SSM_PSR_IC_AND_DEFAULT_BITS_AND_SRLZ_I(clob0, clob1) \ |
| 90 | ssm psr.ic | PSR_DEFAULT_BITS \ |
Isaku Yamahata | e92e8c6 | 2008-05-19 22:13:36 +0900 | [diff] [blame] | 91 | ;; \ |
| 92 | srlz.i /* guarantee that interruption collectin is on */ \ |
| 93 | ;; |
| 94 | |
| 95 | #define SSM_PSR_IC_AND_SRLZ_D(clob0, clob1) \ |
| 96 | ssm psr.ic \ |
Isaku Yamahata | e92e8c6 | 2008-05-19 22:13:36 +0900 | [diff] [blame] | 97 | ;; \ |
| 98 | srlz.d |
| 99 | |
| 100 | #define RSM_PSR_IC(clob) \ |
Luis R. Rodriguez | e55645e | 2015-06-02 11:42:02 -0700 | [diff] [blame] | 101 | rsm psr.ic |
Isaku Yamahata | e92e8c6 | 2008-05-19 22:13:36 +0900 | [diff] [blame] | 102 | |
| 103 | #define SSM_PSR_I(pred, pred_clob, clob) \ |
Luis R. Rodriguez | e55645e | 2015-06-02 11:42:02 -0700 | [diff] [blame] | 104 | (pred) ssm psr.i |
Isaku Yamahata | e92e8c6 | 2008-05-19 22:13:36 +0900 | [diff] [blame] | 105 | |
| 106 | #define RSM_PSR_I(pred, clob0, clob1) \ |
Luis R. Rodriguez | e55645e | 2015-06-02 11:42:02 -0700 | [diff] [blame] | 107 | (pred) rsm psr.i |
Isaku Yamahata | e92e8c6 | 2008-05-19 22:13:36 +0900 | [diff] [blame] | 108 | |
| 109 | #define RSM_PSR_I_IC(clob0, clob1, clob2) \ |
Luis R. Rodriguez | e55645e | 2015-06-02 11:42:02 -0700 | [diff] [blame] | 110 | rsm psr.i | psr.ic |
Isaku Yamahata | e92e8c6 | 2008-05-19 22:13:36 +0900 | [diff] [blame] | 111 | |
| 112 | #define RSM_PSR_DT \ |
| 113 | rsm psr.dt |
| 114 | |
Isaku Yamahata | c431251 | 2009-03-04 21:05:45 +0900 | [diff] [blame] | 115 | #define RSM_PSR_BE_I(clob0, clob1) \ |
Luis R. Rodriguez | e55645e | 2015-06-02 11:42:02 -0700 | [diff] [blame] | 116 | rsm psr.be | psr.i |
Isaku Yamahata | c431251 | 2009-03-04 21:05:45 +0900 | [diff] [blame] | 117 | |
Isaku Yamahata | e92e8c6 | 2008-05-19 22:13:36 +0900 | [diff] [blame] | 118 | #define SSM_PSR_DT_AND_SRLZ_I \ |
| 119 | ssm psr.dt \ |
| 120 | ;; \ |
| 121 | srlz.i |
| 122 | |
| 123 | #define BSW_0(clob0, clob1, clob2) \ |
Luis R. Rodriguez | e55645e | 2015-06-02 11:42:02 -0700 | [diff] [blame] | 124 | bsw.0 |
Isaku Yamahata | e92e8c6 | 2008-05-19 22:13:36 +0900 | [diff] [blame] | 125 | |
| 126 | #define BSW_1(clob0, clob1) \ |
Luis R. Rodriguez | e55645e | 2015-06-02 11:42:02 -0700 | [diff] [blame] | 127 | bsw.1 |
Isaku Yamahata | e92e8c6 | 2008-05-19 22:13:36 +0900 | [diff] [blame] | 128 | |
| 129 | #define COVER \ |
| 130 | cover |
| 131 | |
| 132 | #define RFI \ |
| 133 | rfi |