704 TWI_OPCODE = (3u << OPCODE_SHIFT), |
704 TWI_OPCODE = (3u << OPCODE_SHIFT), |
705 TD_OPCODE = (31u << OPCODE_SHIFT | 68u << 1), |
705 TD_OPCODE = (31u << OPCODE_SHIFT | 68u << 1), |
706 TW_OPCODE = (31u << OPCODE_SHIFT | 4u << 1), |
706 TW_OPCODE = (31u << OPCODE_SHIFT | 4u << 1), |
707 |
707 |
708 // Atomics. |
708 // Atomics. |
|
709 LBARX_OPCODE = (31u << OPCODE_SHIFT | 52u << 1), |
|
710 LHARX_OPCODE = (31u << OPCODE_SHIFT | 116u << 1), |
709 LWARX_OPCODE = (31u << OPCODE_SHIFT | 20u << 1), |
711 LWARX_OPCODE = (31u << OPCODE_SHIFT | 20u << 1), |
710 LDARX_OPCODE = (31u << OPCODE_SHIFT | 84u << 1), |
712 LDARX_OPCODE = (31u << OPCODE_SHIFT | 84u << 1), |
711 LQARX_OPCODE = (31u << OPCODE_SHIFT | 276u << 1), |
713 LQARX_OPCODE = (31u << OPCODE_SHIFT | 276u << 1), |
|
714 STBCX_OPCODE = (31u << OPCODE_SHIFT | 694u << 1), |
|
715 STHCX_OPCODE = (31u << OPCODE_SHIFT | 726u << 1), |
712 STWCX_OPCODE = (31u << OPCODE_SHIFT | 150u << 1), |
716 STWCX_OPCODE = (31u << OPCODE_SHIFT | 150u << 1), |
713 STDCX_OPCODE = (31u << OPCODE_SHIFT | 214u << 1), |
717 STDCX_OPCODE = (31u << OPCODE_SHIFT | 214u << 1), |
714 STQCX_OPCODE = (31u << OPCODE_SHIFT | 182u << 1) |
718 STQCX_OPCODE = (31u << OPCODE_SHIFT | 182u << 1) |
715 |
719 |
716 }; |
720 }; |
1794 // Wait instructions for polling. Attention: May result in SIGILL. |
1798 // Wait instructions for polling. Attention: May result in SIGILL. |
1795 inline void wait(); |
1799 inline void wait(); |
1796 inline void waitrsv(); // >=Power7 |
1800 inline void waitrsv(); // >=Power7 |
1797 |
1801 |
1798 // atomics |
1802 // atomics |
|
1803 inline void lbarx_unchecked(Register d, Register a, Register b, int eh1 = 0); // >=Power 8 |
|
1804 inline void lharx_unchecked(Register d, Register a, Register b, int eh1 = 0); // >=Power 8 |
1799 inline void lwarx_unchecked(Register d, Register a, Register b, int eh1 = 0); |
1805 inline void lwarx_unchecked(Register d, Register a, Register b, int eh1 = 0); |
1800 inline void ldarx_unchecked(Register d, Register a, Register b, int eh1 = 0); |
1806 inline void ldarx_unchecked(Register d, Register a, Register b, int eh1 = 0); |
1801 inline void lqarx_unchecked(Register d, Register a, Register b, int eh1 = 0); |
1807 inline void lqarx_unchecked(Register d, Register a, Register b, int eh1 = 0); // >=Power 8 |
1802 inline bool lxarx_hint_exclusive_access(); |
1808 inline bool lxarx_hint_exclusive_access(); |
|
1809 inline void lbarx( Register d, Register a, Register b, bool hint_exclusive_access = false); |
|
1810 inline void lharx( Register d, Register a, Register b, bool hint_exclusive_access = false); |
1803 inline void lwarx( Register d, Register a, Register b, bool hint_exclusive_access = false); |
1811 inline void lwarx( Register d, Register a, Register b, bool hint_exclusive_access = false); |
1804 inline void ldarx( Register d, Register a, Register b, bool hint_exclusive_access = false); |
1812 inline void ldarx( Register d, Register a, Register b, bool hint_exclusive_access = false); |
1805 inline void lqarx( Register d, Register a, Register b, bool hint_exclusive_access = false); |
1813 inline void lqarx( Register d, Register a, Register b, bool hint_exclusive_access = false); |
|
1814 inline void stbcx_( Register s, Register a, Register b); |
|
1815 inline void sthcx_( Register s, Register a, Register b); |
1806 inline void stwcx_( Register s, Register a, Register b); |
1816 inline void stwcx_( Register s, Register a, Register b); |
1807 inline void stdcx_( Register s, Register a, Register b); |
1817 inline void stdcx_( Register s, Register a, Register b); |
1808 inline void stqcx_( Register s, Register a, Register b); |
1818 inline void stqcx_( Register s, Register a, Register b); |
1809 |
1819 |
1810 // Instructions for adjusting thread priority for simultaneous |
1820 // Instructions for adjusting thread priority for simultaneous |
2167 // dcache write hint |
2177 // dcache write hint |
2168 inline void dcbtst( Register s2); |
2178 inline void dcbtst( Register s2); |
2169 inline void dcbtstct(Register s2, int ct); |
2179 inline void dcbtstct(Register s2, int ct); |
2170 |
2180 |
2171 // Atomics: use ra0mem to disallow R0 as base. |
2181 // Atomics: use ra0mem to disallow R0 as base. |
|
2182 inline void lbarx_unchecked(Register d, Register b, int eh1); |
|
2183 inline void lharx_unchecked(Register d, Register b, int eh1); |
2172 inline void lwarx_unchecked(Register d, Register b, int eh1); |
2184 inline void lwarx_unchecked(Register d, Register b, int eh1); |
2173 inline void ldarx_unchecked(Register d, Register b, int eh1); |
2185 inline void ldarx_unchecked(Register d, Register b, int eh1); |
2174 inline void lqarx_unchecked(Register d, Register b, int eh1); |
2186 inline void lqarx_unchecked(Register d, Register b, int eh1); |
|
2187 inline void lbarx( Register d, Register b, bool hint_exclusive_access); |
|
2188 inline void lharx( Register d, Register b, bool hint_exclusive_access); |
2175 inline void lwarx( Register d, Register b, bool hint_exclusive_access); |
2189 inline void lwarx( Register d, Register b, bool hint_exclusive_access); |
2176 inline void ldarx( Register d, Register b, bool hint_exclusive_access); |
2190 inline void ldarx( Register d, Register b, bool hint_exclusive_access); |
2177 inline void lqarx( Register d, Register b, bool hint_exclusive_access); |
2191 inline void lqarx( Register d, Register b, bool hint_exclusive_access); |
|
2192 inline void stbcx_(Register s, Register b); |
|
2193 inline void sthcx_(Register s, Register b); |
2178 inline void stwcx_(Register s, Register b); |
2194 inline void stwcx_(Register s, Register b); |
2179 inline void stdcx_(Register s, Register b); |
2195 inline void stdcx_(Register s, Register b); |
2180 inline void stqcx_(Register s, Register b); |
2196 inline void stqcx_(Register s, Register b); |
2181 inline void lfs( FloatRegister d, int si16); |
2197 inline void lfs( FloatRegister d, int si16); |
2182 inline void lfsx( FloatRegister d, Register b); |
2198 inline void lfsx( FloatRegister d, Register b); |