1bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion 2bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion/*---------------------------------------------------------------*/ 3752f90673ebbb6b2f55fc5e46606dea371313713sewardj/*--- begin host_ppc_defs.h ---*/ 4bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion/*---------------------------------------------------------------*/ 5bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion 6bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion/* 7752f90673ebbb6b2f55fc5e46606dea371313713sewardj This file is part of Valgrind, a dynamic binary instrumentation 8752f90673ebbb6b2f55fc5e46606dea371313713sewardj framework. 9bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion 1089ae8477745fd2a15453557d729a50e627325ee2sewardj Copyright (C) 2004-2013 OpenWorks LLP 11752f90673ebbb6b2f55fc5e46606dea371313713sewardj info@open-works.net 127bd6ffe203f3aa9e7b25f7eae40a9b9cf48710cfsewardj 13752f90673ebbb6b2f55fc5e46606dea371313713sewardj This program is free software; you can redistribute it and/or 14752f90673ebbb6b2f55fc5e46606dea371313713sewardj modify it under the terms of the GNU General Public License as 15752f90673ebbb6b2f55fc5e46606dea371313713sewardj published by the Free Software Foundation; either version 2 of the 16752f90673ebbb6b2f55fc5e46606dea371313713sewardj License, or (at your option) any later version. 177bd6ffe203f3aa9e7b25f7eae40a9b9cf48710cfsewardj 18752f90673ebbb6b2f55fc5e46606dea371313713sewardj This program is distributed in the hope that it will be useful, but 19752f90673ebbb6b2f55fc5e46606dea371313713sewardj WITHOUT ANY WARRANTY; without even the implied warranty of 20752f90673ebbb6b2f55fc5e46606dea371313713sewardj MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 21752f90673ebbb6b2f55fc5e46606dea371313713sewardj General Public License for more details. 22752f90673ebbb6b2f55fc5e46606dea371313713sewardj 23752f90673ebbb6b2f55fc5e46606dea371313713sewardj You should have received a copy of the GNU General Public License 24752f90673ebbb6b2f55fc5e46606dea371313713sewardj along with this program; if not, write to the Free Software 25752f90673ebbb6b2f55fc5e46606dea371313713sewardj Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 267bd6ffe203f3aa9e7b25f7eae40a9b9cf48710cfsewardj 02110-1301, USA. 277bd6ffe203f3aa9e7b25f7eae40a9b9cf48710cfsewardj 28752f90673ebbb6b2f55fc5e46606dea371313713sewardj The GNU General Public License is contained in the file COPYING. 29bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion 30bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion Neither the names of the U.S. Department of Energy nor the 31bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion University of California nor the names of its contributors may be 32bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion used to endorse or promote products derived from this software 33bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion without prior written permission. 34bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion*/ 35bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion 36cef7d3e3df4796e35b4521158d9dc058f034aa87sewardj#ifndef __VEX_HOST_PPC_DEFS_H 37cef7d3e3df4796e35b4521158d9dc058f034aa87sewardj#define __VEX_HOST_PPC_DEFS_H 38bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion 3958a637b6675d4d68e13d18b75cea7eee2a2a91feflorian#include "libvex_basictypes.h" 4058a637b6675d4d68e13d18b75cea7eee2a2a91feflorian#include "libvex.h" // VexArch 4158a637b6675d4d68e13d18b75cea7eee2a2a91feflorian#include "host_generic_regs.h" // HReg 4258a637b6675d4d68e13d18b75cea7eee2a2a91feflorian 43bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion 44bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion/* --------- Registers. --------- */ 45bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion 46a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardj#define ST_IN static inline 47a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardj 48a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardj#define GPR(_mode64, _enc, _ix64, _ix32) \ 49a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardj mkHReg(False, (_mode64) ? HRcInt64 : HRcInt32, \ 50a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardj (_enc), (_mode64) ? (_ix64) : (_ix32)) 51a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardj 52a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardj#define FPR(_mode64, _enc, _ix64, _ix32) \ 53a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardj mkHReg(False, HRcFlt64, \ 54a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardj (_enc), (_mode64) ? (_ix64) : (_ix32)) 55a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardj 56a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardj#define VR(_mode64, _enc, _ix64, _ix32) \ 57a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardj mkHReg(False, HRcVec128, \ 58a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardj (_enc), (_mode64) ? (_ix64) : (_ix32)) 59a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardj 60a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_GPR3 ( Bool mode64 ) { return GPR(mode64, 3, 0, 0); } 61a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_GPR4 ( Bool mode64 ) { return GPR(mode64, 4, 1, 1); } 62a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_GPR5 ( Bool mode64 ) { return GPR(mode64, 5, 2, 2); } 63a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_GPR6 ( Bool mode64 ) { return GPR(mode64, 6, 3, 3); } 64a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_GPR7 ( Bool mode64 ) { return GPR(mode64, 7, 4, 4); } 65a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_GPR8 ( Bool mode64 ) { return GPR(mode64, 8, 5, 5); } 66a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_GPR9 ( Bool mode64 ) { return GPR(mode64, 9, 6, 6); } 67a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_GPR10 ( Bool mode64 ) { return GPR(mode64, 10, 7, 7); } 68a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardj 69a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardj// r11 and r12 are only allocatable in 32-bit mode. Hence the 64-bit 70a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardj// index numbering doesn't advance for these two. 71a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_GPR11 ( Bool mode64 ) { return GPR(mode64, 11, 0, 8); } 72a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_GPR12 ( Bool mode64 ) { return GPR(mode64, 12, 0, 9); } 73a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardj 74a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_GPR14 ( Bool mode64 ) { return GPR(mode64, 14, 8, 10); } 75a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_GPR15 ( Bool mode64 ) { return GPR(mode64, 15, 9, 11); } 76a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_GPR16 ( Bool mode64 ) { return GPR(mode64, 16, 10, 12); } 77a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_GPR17 ( Bool mode64 ) { return GPR(mode64, 17, 11, 13); } 78a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_GPR18 ( Bool mode64 ) { return GPR(mode64, 18, 12, 14); } 79a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_GPR19 ( Bool mode64 ) { return GPR(mode64, 19, 13, 15); } 80a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_GPR20 ( Bool mode64 ) { return GPR(mode64, 20, 14, 16); } 81a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_GPR21 ( Bool mode64 ) { return GPR(mode64, 21, 15, 17); } 82a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_GPR22 ( Bool mode64 ) { return GPR(mode64, 22, 16, 18); } 83a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_GPR23 ( Bool mode64 ) { return GPR(mode64, 23, 17, 19); } 84a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_GPR24 ( Bool mode64 ) { return GPR(mode64, 24, 18, 20); } 85a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_GPR25 ( Bool mode64 ) { return GPR(mode64, 25, 19, 21); } 86a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_GPR26 ( Bool mode64 ) { return GPR(mode64, 26, 20, 22); } 87a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_GPR27 ( Bool mode64 ) { return GPR(mode64, 27, 21, 23); } 88a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_GPR28 ( Bool mode64 ) { return GPR(mode64, 28, 22, 24); } 89a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardj 90a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_FPR14 ( Bool mode64 ) { return FPR(mode64, 14, 23, 25); } 91a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_FPR15 ( Bool mode64 ) { return FPR(mode64, 15, 24, 26); } 92a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_FPR16 ( Bool mode64 ) { return FPR(mode64, 16, 25, 27); } 93a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_FPR17 ( Bool mode64 ) { return FPR(mode64, 17, 26, 28); } 94a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_FPR18 ( Bool mode64 ) { return FPR(mode64, 18, 27, 29); } 95a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_FPR19 ( Bool mode64 ) { return FPR(mode64, 19, 28, 30); } 96a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_FPR20 ( Bool mode64 ) { return FPR(mode64, 20, 29, 31); } 97a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_FPR21 ( Bool mode64 ) { return FPR(mode64, 21, 30, 32); } 98a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardj 99a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_VR20 ( Bool mode64 ) { return VR (mode64, 20, 31, 33); } 100a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_VR21 ( Bool mode64 ) { return VR (mode64, 21, 32, 34); } 101a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_VR22 ( Bool mode64 ) { return VR (mode64, 22, 33, 35); } 102a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_VR23 ( Bool mode64 ) { return VR (mode64, 23, 34, 36); } 103a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_VR24 ( Bool mode64 ) { return VR (mode64, 24, 35, 37); } 104a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_VR25 ( Bool mode64 ) { return VR (mode64, 25, 36, 38); } 105a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_VR26 ( Bool mode64 ) { return VR (mode64, 26, 37, 39); } 106a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_VR27 ( Bool mode64 ) { return VR (mode64, 27, 38, 40); } 107a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardj 108a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_GPR1 ( Bool mode64 ) { return GPR(mode64, 1, 39, 41); } 109a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_GPR29 ( Bool mode64 ) { return GPR(mode64, 29, 40, 42); } 110a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_GPR30 ( Bool mode64 ) { return GPR(mode64, 30, 41, 43); } 111a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_GPR31 ( Bool mode64 ) { return GPR(mode64, 31, 42, 44); } 112a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjST_IN HReg hregPPC_VR29 ( Bool mode64 ) { return VR (mode64, 29, 43, 45); } 113a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardj 114a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardj#undef ST_IN 115a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardj#undef GPR 116a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardj#undef FPR 117a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardj#undef VR 118bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion 119f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion#define StackFramePtr(_mode64) hregPPC_GPR1(_mode64) 120f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion#define GuestStatePtr(_mode64) hregPPC_GPR31(_mode64) 121bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion 122a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardj/* Num registers used for function calls */ 123a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardj#define PPC_N_REGPARMS 8 124a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardj 125a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjextern void ppHRegPPC ( HReg ); 1262c49e036c365df707cd8e6622d66382f380557b2cerion 1272c49e036c365df707cd8e6622d66382f380557b2cerion 128b51f0f4f33256638ed953156a2635aa739b232f1sewardj/* --------- Condition codes --------- */ 1292c49e036c365df707cd8e6622d66382f380557b2cerion 130b51f0f4f33256638ed953156a2635aa739b232f1sewardj/* This gives names from bitfields in CR; hence it names BI numbers */ 131b51f0f4f33256638ed953156a2635aa739b232f1sewardj/* Using IBM/hardware indexing convention */ 132ab9132df645da753ae6b0421d551ea5c024aa6e6ceriontypedef 133b51f0f4f33256638ed953156a2635aa739b232f1sewardj enum { 134b51f0f4f33256638ed953156a2635aa739b232f1sewardj // CR7, which we use for integer compares 135b51f0f4f33256638ed953156a2635aa739b232f1sewardj Pcf_7LT = 28, /* neg | lt */ 136b51f0f4f33256638ed953156a2635aa739b232f1sewardj Pcf_7GT = 29, /* pos | gt */ 137b51f0f4f33256638ed953156a2635aa739b232f1sewardj Pcf_7EQ = 30, /* zero | equal */ 1387e3080762e559bb58213654a7be8cbb529e40446sewardj Pcf_7SO = 31, /* summary overflow */ 1397e3080762e559bb58213654a7be8cbb529e40446sewardj Pcf_NONE = 32 /* no condition; used with Pct_ALWAYS */ 140ab9132df645da753ae6b0421d551ea5c024aa6e6cerion } 1415b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCCondFlag; 1422c49e036c365df707cd8e6622d66382f380557b2cerion 143ab9132df645da753ae6b0421d551ea5c024aa6e6ceriontypedef 1447cf8e4e86f4d055ccb2d0c681c76100960a8e235cerion enum { /* Maps bc bitfield BO */ 1457e3080762e559bb58213654a7be8cbb529e40446sewardj Pct_FALSE = 0x4, /* associated PPCCondFlag must not be Pcf_NONE */ 1467e3080762e559bb58213654a7be8cbb529e40446sewardj Pct_TRUE = 0xC, /* associated PPCCondFlag must not be Pcf_NONE */ 1477e3080762e559bb58213654a7be8cbb529e40446sewardj Pct_ALWAYS = 0x14 /* associated PPCCondFlag must be Pcf_NONE */ 148ab9132df645da753ae6b0421d551ea5c024aa6e6cerion } 1495b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCCondTest; 1502c49e036c365df707cd8e6622d66382f380557b2cerion 151ab9132df645da753ae6b0421d551ea5c024aa6e6ceriontypedef 152ab9132df645da753ae6b0421d551ea5c024aa6e6cerion struct { 1535b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCCondFlag flag; 1545b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCCondTest test; 1552c49e036c365df707cd8e6622d66382f380557b2cerion } 1565b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCCondCode; 1572c49e036c365df707cd8e6622d66382f380557b2cerion 15855085f8680acc89d727e321f3b34cae1a8c4093aflorianextern const HChar* showPPCCondCode ( PPCCondCode ); 159bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion 1607cf8e4e86f4d055ccb2d0c681c76100960a8e235cerion/* constructor */ 1615b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern PPCCondCode mk_PPCCondCode ( PPCCondTest, PPCCondFlag ); 1627cf8e4e86f4d055ccb2d0c681c76100960a8e235cerion 1637cf8e4e86f4d055ccb2d0c681c76100960a8e235cerion/* false->true, true->false */ 1645b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern PPCCondTest invertCondTest ( PPCCondTest ); 165bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion 166ab9132df645da753ae6b0421d551ea5c024aa6e6cerion 167ab9132df645da753ae6b0421d551ea5c024aa6e6cerion 16833aa6da1102a12139debec996c33e4effa16f77ccerion 169bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion/* --------- Memory address expressions (amodes). --------- */ 170bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion 171bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fceriontypedef 172bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion enum { 17392923de6a68e5c84365b1fe5799c79815fd7d8e6sewardj Pam_IR=1, /* Immediate (signed 16-bit) + Reg */ 17492923de6a68e5c84365b1fe5799c79815fd7d8e6sewardj Pam_RR=2 /* Reg1 + Reg2 */ 175bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion } 1765b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCAModeTag; 177bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion 178bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fceriontypedef 179bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion struct { 1805b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCAModeTag tag; 181bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion union { 182bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion struct { 183bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion HReg base; 184a5f957df568527d44219383f4a04a8f4028b80a2sewardj Int index; 185bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion } IR; 186bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion struct { 187bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion HReg base; 188bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion HReg index; 189bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion } RR; 190bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion } Pam; 191bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion } 1925b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCAMode; 193bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion 1945b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern PPCAMode* PPCAMode_IR ( Int, HReg ); 1955b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern PPCAMode* PPCAMode_RR ( HReg, HReg ); 196bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion 1975b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern PPCAMode* dopyPPCAMode ( PPCAMode* ); 198bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion 1995b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern void ppPPCAMode ( PPCAMode* ); 200bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion 201bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion 202b51f0f4f33256638ed953156a2635aa739b232f1sewardj/* --------- Operand, which can be a reg or a u16/s16. --------- */ 203b51f0f4f33256638ed953156a2635aa739b232f1sewardj/* ("RH" == "Register or Halfword immediate") */ 204bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fceriontypedef 205bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion enum { 20692923de6a68e5c84365b1fe5799c79815fd7d8e6sewardj Prh_Imm=3, 20792923de6a68e5c84365b1fe5799c79815fd7d8e6sewardj Prh_Reg=4 208bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion } 2095b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCRHTag; 210bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion 211bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fceriontypedef 212bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion struct { 2135b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCRHTag tag; 214bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion union { 215bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion struct { 216b51f0f4f33256638ed953156a2635aa739b232f1sewardj Bool syned; 217b51f0f4f33256638ed953156a2635aa739b232f1sewardj UShort imm16; 218bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion } Imm; 219bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion struct { 220bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion HReg reg; 221bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion } Reg; 222bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion } 223b51f0f4f33256638ed953156a2635aa739b232f1sewardj Prh; 224b51f0f4f33256638ed953156a2635aa739b232f1sewardj } 2255b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCRH; 226b51f0f4f33256638ed953156a2635aa739b232f1sewardj 2275b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern PPCRH* PPCRH_Imm ( Bool, UShort ); 2285b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern PPCRH* PPCRH_Reg ( HReg ); 229b51f0f4f33256638ed953156a2635aa739b232f1sewardj 2305b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern void ppPPCRH ( PPCRH* ); 231b51f0f4f33256638ed953156a2635aa739b232f1sewardj 232b51f0f4f33256638ed953156a2635aa739b232f1sewardj 233f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion/* --------- Operand, which can be a reg or a u32/64. --------- */ 234b51f0f4f33256638ed953156a2635aa739b232f1sewardj 235b51f0f4f33256638ed953156a2635aa739b232f1sewardjtypedef 236b51f0f4f33256638ed953156a2635aa739b232f1sewardj enum { 23792923de6a68e5c84365b1fe5799c79815fd7d8e6sewardj Pri_Imm=5, 23892923de6a68e5c84365b1fe5799c79815fd7d8e6sewardj Pri_Reg=6 239b51f0f4f33256638ed953156a2635aa739b232f1sewardj } 2405b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCRITag; 241b51f0f4f33256638ed953156a2635aa739b232f1sewardj 242b51f0f4f33256638ed953156a2635aa739b232f1sewardjtypedef 243b51f0f4f33256638ed953156a2635aa739b232f1sewardj struct { 2445b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCRITag tag; 245b51f0f4f33256638ed953156a2635aa739b232f1sewardj union { 246f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion ULong Imm; 247f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion HReg Reg; 248b51f0f4f33256638ed953156a2635aa739b232f1sewardj } 249bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion Pri; 250bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion } 2515b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCRI; 252bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion 2535b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern PPCRI* PPCRI_Imm ( ULong ); 254478646f54befaba01cbceb40fd5e46cdf562fdb5sewardjextern PPCRI* PPCRI_Reg( HReg ); 255bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion 2565b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern void ppPPCRI ( PPCRI* ); 257bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion 258bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion 25927b3d7ec17c3a0814d4980db87defbb4f07339bfcerion/* --------- Operand, which can be a vector reg or a s6. --------- */ 26027b3d7ec17c3a0814d4980db87defbb4f07339bfcerion/* ("VI" == "Vector Register or Immediate") */ 26127b3d7ec17c3a0814d4980db87defbb4f07339bfceriontypedef 26227b3d7ec17c3a0814d4980db87defbb4f07339bfcerion enum { 26392923de6a68e5c84365b1fe5799c79815fd7d8e6sewardj Pvi_Imm=7, 26492923de6a68e5c84365b1fe5799c79815fd7d8e6sewardj Pvi_Reg=8 26527b3d7ec17c3a0814d4980db87defbb4f07339bfcerion } 2665b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCVI5sTag; 26727b3d7ec17c3a0814d4980db87defbb4f07339bfcerion 26827b3d7ec17c3a0814d4980db87defbb4f07339bfceriontypedef 26927b3d7ec17c3a0814d4980db87defbb4f07339bfcerion struct { 2705b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCVI5sTag tag; 27127b3d7ec17c3a0814d4980db87defbb4f07339bfcerion union { 27227b3d7ec17c3a0814d4980db87defbb4f07339bfcerion Char Imm5s; 27327b3d7ec17c3a0814d4980db87defbb4f07339bfcerion HReg Reg; 27427b3d7ec17c3a0814d4980db87defbb4f07339bfcerion } 27527b3d7ec17c3a0814d4980db87defbb4f07339bfcerion Pvi; 27627b3d7ec17c3a0814d4980db87defbb4f07339bfcerion } 2775b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCVI5s; 27827b3d7ec17c3a0814d4980db87defbb4f07339bfcerion 2795b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern PPCVI5s* PPCVI5s_Imm ( Char ); 2805b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern PPCVI5s* PPCVI5s_Reg ( HReg ); 28127b3d7ec17c3a0814d4980db87defbb4f07339bfcerion 2825b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern void ppPPCVI5s ( PPCVI5s* ); 28327b3d7ec17c3a0814d4980db87defbb4f07339bfcerion 28427b3d7ec17c3a0814d4980db87defbb4f07339bfcerion 285cd304497d9d869f9b24a002299d3953ee072229bcerion/* --------- Instructions. --------- */ 286bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion 2872c49e036c365df707cd8e6622d66382f380557b2cerion/* --------- */ 2882c49e036c365df707cd8e6622d66382f380557b2ceriontypedef 2892c49e036c365df707cd8e6622d66382f380557b2cerion enum { 2902c49e036c365df707cd8e6622d66382f380557b2cerion Pun_NEG, 291e13bb31f40567937f05190474ec2cad3b7e22240cerion Pun_NOT, 29207b07a966a2fdbcf621251a0c1a8ab84807fb120cerion Pun_CLZ32, 2937fd5bb0dd6e9b745f8f8452f15cebb3c628d0a22sewardj Pun_CLZ64, 2947fd5bb0dd6e9b745f8f8452f15cebb3c628d0a22sewardj Pun_EXTSW 2952c49e036c365df707cd8e6622d66382f380557b2cerion } 2965b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCUnaryOp; 2972c49e036c365df707cd8e6622d66382f380557b2cerion 29855085f8680acc89d727e321f3b34cae1a8c4093aflorianextern const HChar* showPPCUnaryOp ( PPCUnaryOp ); 299cd304497d9d869f9b24a002299d3953ee072229bcerion 300cd304497d9d869f9b24a002299d3953ee072229bcerion 301cd304497d9d869f9b24a002299d3953ee072229bcerion/* --------- */ 302cd304497d9d869f9b24a002299d3953ee072229bceriontypedef 303cd304497d9d869f9b24a002299d3953ee072229bcerion enum { 304cd304497d9d869f9b24a002299d3953ee072229bcerion Palu_INVALID, 305b51f0f4f33256638ed953156a2635aa739b232f1sewardj Palu_ADD, Palu_SUB, 306b51f0f4f33256638ed953156a2635aa739b232f1sewardj Palu_AND, Palu_OR, Palu_XOR, 307cd304497d9d869f9b24a002299d3953ee072229bcerion } 3085b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCAluOp; 309cd304497d9d869f9b24a002299d3953ee072229bcerion 310b51f0f4f33256638ed953156a2635aa739b232f1sewardjextern 31155085f8680acc89d727e321f3b34cae1a8c4093aflorianconst HChar* showPPCAluOp ( PPCAluOp, 31255085f8680acc89d727e321f3b34cae1a8c4093aflorian Bool /* is the 2nd operand an immediate? */); 313bb01b7cbfd84c27dd213f67a144ea5a99af36961cerion 314bb01b7cbfd84c27dd213f67a144ea5a99af36961cerion 315bb01b7cbfd84c27dd213f67a144ea5a99af36961cerion/* --------- */ 316bb01b7cbfd84c27dd213f67a144ea5a99af36961ceriontypedef 317bb01b7cbfd84c27dd213f67a144ea5a99af36961cerion enum { 318bb01b7cbfd84c27dd213f67a144ea5a99af36961cerion Pshft_INVALID, 319bb01b7cbfd84c27dd213f67a144ea5a99af36961cerion Pshft_SHL, Pshft_SHR, Pshft_SAR, 320bb01b7cbfd84c27dd213f67a144ea5a99af36961cerion } 3215b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCShftOp; 322bb01b7cbfd84c27dd213f67a144ea5a99af36961cerion 323bb01b7cbfd84c27dd213f67a144ea5a99af36961cerionextern 32455085f8680acc89d727e321f3b34cae1a8c4093aflorianconst HChar* showPPCShftOp ( PPCShftOp, 32555085f8680acc89d727e321f3b34cae1a8c4093aflorian Bool /* is the 2nd operand an immediate? */, 32655085f8680acc89d727e321f3b34cae1a8c4093aflorian Bool /* is this a 32bit or 64bit op? */ ); 327ab9132df645da753ae6b0421d551ea5c024aa6e6cerion 328ab9132df645da753ae6b0421d551ea5c024aa6e6cerion 329094d1397b3f69b1a538e80ab509ea8cd75f4be3bcerion/* --------- */ 330094d1397b3f69b1a538e80ab509ea8cd75f4be3bceriontypedef 331094d1397b3f69b1a538e80ab509ea8cd75f4be3bcerion enum { 332094d1397b3f69b1a538e80ab509ea8cd75f4be3bcerion Pfp_INVALID, 33340c802659108a96bb87cbc1a30b7b77e2abd0829sewardj 33440c802659108a96bb87cbc1a30b7b77e2abd0829sewardj /* Ternary */ 335c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj Pfp_MADDD, Pfp_MSUBD, 336c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj Pfp_MADDS, Pfp_MSUBS, 337c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj Pfp_DFPADD, Pfp_DFPADDQ, 338c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj Pfp_DFPSUB, Pfp_DFPSUBQ, 339c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj Pfp_DFPMUL, Pfp_DFPMULQ, 340c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj Pfp_DFPDIV, Pfp_DFPDIVQ, 341c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj Pfp_DQUAQ, Pfp_DRRNDQ, 34240c802659108a96bb87cbc1a30b7b77e2abd0829sewardj 343094d1397b3f69b1a538e80ab509ea8cd75f4be3bcerion /* Binary */ 34426217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj Pfp_ADDD, Pfp_SUBD, Pfp_MULD, Pfp_DIVD, 34526217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj Pfp_ADDS, Pfp_SUBS, Pfp_MULS, Pfp_DIVS, 346cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj Pfp_DRSP, Pfp_DRDPQ, Pfp_DCTFIX, Pfp_DCTFIXQ, Pfp_DCFFIX, 347cea07ccbe9aa9b5fd8e9b318471c6c74aa147acbcarll Pfp_DQUA, Pfp_RRDTR, Pfp_DIEX, Pfp_DIEXQ, Pfp_DRINTN, 348094d1397b3f69b1a538e80ab509ea8cd75f4be3bcerion 349094d1397b3f69b1a538e80ab509ea8cd75f4be3bcerion /* Unary */ 3500f1ef86a99d5129e04ed188e44d16a344d2bc42asewardj Pfp_SQRT, Pfp_ABS, Pfp_NEG, Pfp_MOV, Pfp_RES, Pfp_RSQRTE, 35126217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj Pfp_FRIN, Pfp_FRIM, Pfp_FRIP, Pfp_FRIZ, 352cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj Pfp_DSCLI, Pfp_DSCRI, Pfp_DSCLIQ, Pfp_DSCRIQ, Pfp_DCTDP, 353cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj Pfp_DCTQPQ, Pfp_DCFFIXQ, Pfp_DXEX, Pfp_DXEXQ, 354cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj 355094d1397b3f69b1a538e80ab509ea8cd75f4be3bcerion } 3565b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCFpOp; 357094d1397b3f69b1a538e80ab509ea8cd75f4be3bcerion 35855085f8680acc89d727e321f3b34cae1a8c4093aflorianextern const HChar* showPPCFpOp ( PPCFpOp ); 359bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion 360bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion 361bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion/* --------- */ 362bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fceriontypedef 363bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion enum { 364c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion Pav_INVALID, 365c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion 366c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion /* Integer Unary */ 367c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion Pav_MOV, /* Mov */ 368c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion Pav_NOT, /* Bitwise */ 369c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion Pav_UNPCKH8S, Pav_UNPCKH16S, /* Unpack */ 370c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion Pav_UNPCKL8S, Pav_UNPCKL16S, 371c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion Pav_UNPCKHPIX, Pav_UNPCKLPIX, 372c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion 373c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion /* Integer Binary */ 3748ea0d3ebfb8b1e4d8b6f851b0079c47a9886c686cerion Pav_AND, Pav_OR, Pav_XOR, /* Bitwise */ 375f34ccc4ae06b8de99583c836fc15a571567b363acerion Pav_ADDU, Pav_QADDU, Pav_QADDS, 376f34ccc4ae06b8de99583c836fc15a571567b363acerion Pav_SUBU, Pav_QSUBU, Pav_QSUBS, 37748ae46b56cef87c90638b25d6b2462c475033da8carll Pav_MULU, 3786b6f59eabd7c38edf6732b8e127eb2913b44cbf6cerion Pav_OMULU, Pav_OMULS, Pav_EMULU, Pav_EMULS, 3796b6f59eabd7c38edf6732b8e127eb2913b44cbf6cerion Pav_AVGU, Pav_AVGS, 3806b6f59eabd7c38edf6732b8e127eb2913b44cbf6cerion Pav_MAXU, Pav_MAXS, 3816b6f59eabd7c38edf6732b8e127eb2913b44cbf6cerion Pav_MINU, Pav_MINS, 382c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion 383c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion /* Compare (always affects CR field 6) */ 3846b6f59eabd7c38edf6732b8e127eb2913b44cbf6cerion Pav_CMPEQU, Pav_CMPGTU, Pav_CMPGTS, 385c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion 386c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion /* Shift */ 3876b6f59eabd7c38edf6732b8e127eb2913b44cbf6cerion Pav_SHL, Pav_SHR, Pav_SAR, Pav_ROTL, 388c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion 389c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion /* Pack */ 390f34ccc4ae06b8de99583c836fc15a571567b363acerion Pav_PACKUU, Pav_QPACKUU, Pav_QPACKSU, Pav_QPACKSS, 3916b6f59eabd7c38edf6732b8e127eb2913b44cbf6cerion Pav_PACKPXL, 392c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion 393c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion /* Merge */ 3946b6f59eabd7c38edf6732b8e127eb2913b44cbf6cerion Pav_MRGHI, Pav_MRGLO, 39548ae46b56cef87c90638b25d6b2462c475033da8carll 39648ae46b56cef87c90638b25d6b2462c475033da8carll /* Concatenation */ 39748ae46b56cef87c90638b25d6b2462c475033da8carll Pav_CATODD, Pav_CATEVEN, 3987deaf9552b546b847528cf39b38898fb7742b5f5carll 3997deaf9552b546b847528cf39b38898fb7742b5f5carll /* Polynomial Multipy-Add */ 4007deaf9552b546b847528cf39b38898fb7742b5f5carll Pav_POLYMULADD, 4017deaf9552b546b847528cf39b38898fb7742b5f5carll 4027deaf9552b546b847528cf39b38898fb7742b5f5carll /* Cipher */ 4037deaf9552b546b847528cf39b38898fb7742b5f5carll Pav_CIPHERV128, Pav_CIPHERLV128, Pav_NCIPHERV128, Pav_NCIPHERLV128, 4047deaf9552b546b847528cf39b38898fb7742b5f5carll Pav_CIPHERSUBV128, 4057deaf9552b546b847528cf39b38898fb7742b5f5carll 4067deaf9552b546b847528cf39b38898fb7742b5f5carll /* Hash */ 4077deaf9552b546b847528cf39b38898fb7742b5f5carll Pav_SHA256, Pav_SHA512, 4087deaf9552b546b847528cf39b38898fb7742b5f5carll 4097deaf9552b546b847528cf39b38898fb7742b5f5carll /* BCD Arithmetic */ 4107deaf9552b546b847528cf39b38898fb7742b5f5carll Pav_BCDAdd, Pav_BCDSub, 4117deaf9552b546b847528cf39b38898fb7742b5f5carll 4127deaf9552b546b847528cf39b38898fb7742b5f5carll /* zero count */ 4137deaf9552b546b847528cf39b38898fb7742b5f5carll Pav_ZEROCNTBYTE, Pav_ZEROCNTWORD, Pav_ZEROCNTHALF, Pav_ZEROCNTDBL, 41460c6bac19ffe055cabab554e7877d73096a8bf17carll 41560c6bac19ffe055cabab554e7877d73096a8bf17carll /* Vector bit matrix transpose by byte */ 41660c6bac19ffe055cabab554e7877d73096a8bf17carll Pav_BITMTXXPOSE, 4178ea0d3ebfb8b1e4d8b6f851b0079c47a9886c686cerion } 4185b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCAvOp; 4198ea0d3ebfb8b1e4d8b6f851b0079c47a9886c686cerion 42055085f8680acc89d727e321f3b34cae1a8c4093aflorianextern const HChar* showPPCAvOp ( PPCAvOp ); 4218ea0d3ebfb8b1e4d8b6f851b0079c47a9886c686cerion 4228ea0d3ebfb8b1e4d8b6f851b0079c47a9886c686cerion 4238ea0d3ebfb8b1e4d8b6f851b0079c47a9886c686cerion/* --------- */ 4248ea0d3ebfb8b1e4d8b6f851b0079c47a9886c686ceriontypedef 4258ea0d3ebfb8b1e4d8b6f851b0079c47a9886c686cerion enum { 4268ea0d3ebfb8b1e4d8b6f851b0079c47a9886c686cerion Pavfp_INVALID, 4276b6f59eabd7c38edf6732b8e127eb2913b44cbf6cerion 4286b6f59eabd7c38edf6732b8e127eb2913b44cbf6cerion /* Floating point binary */ 4298ea0d3ebfb8b1e4d8b6f851b0079c47a9886c686cerion Pavfp_ADDF, Pavfp_SUBF, Pavfp_MULF, 4308ea0d3ebfb8b1e4d8b6f851b0079c47a9886c686cerion Pavfp_MAXF, Pavfp_MINF, 4318ea0d3ebfb8b1e4d8b6f851b0079c47a9886c686cerion Pavfp_CMPEQF, Pavfp_CMPGTF, Pavfp_CMPGEF, 4326b6f59eabd7c38edf6732b8e127eb2913b44cbf6cerion 4338ea0d3ebfb8b1e4d8b6f851b0079c47a9886c686cerion /* Floating point unary */ 4348ea0d3ebfb8b1e4d8b6f851b0079c47a9886c686cerion Pavfp_RCPF, Pavfp_RSQRTF, 435d963eb444d05fe1ef210a729ff056e28c330f120cerion Pavfp_CVTU2F, Pavfp_CVTS2F, Pavfp_QCVTF2U, Pavfp_QCVTF2S, 436d963eb444d05fe1ef210a729ff056e28c330f120cerion Pavfp_ROUNDM, Pavfp_ROUNDP, Pavfp_ROUNDN, Pavfp_ROUNDZ, 437c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion } 4385b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCAvFpOp; 439c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion 44055085f8680acc89d727e321f3b34cae1a8c4093aflorianextern const HChar* showPPCAvFpOp ( PPCAvFpOp ); 441c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion 442c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion 443c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion/* --------- */ 444c3d8bdcb51893e6d23ab9b27122741208a044cf1ceriontypedef 445c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion enum { 446f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion Pin_LI, /* load word (32/64-bit) immediate (fake insn) */ 447bb01b7cbfd84c27dd213f67a144ea5a99af36961cerion Pin_Alu, /* word add/sub/and/or/xor */ 448bb01b7cbfd84c27dd213f67a144ea5a99af36961cerion Pin_Shft, /* word shl/shr/sar */ 4495b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion Pin_AddSubC, /* add/sub with read/write carry */ 450f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion Pin_Cmp, /* word compare */ 451f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion Pin_Unary, /* not, neg, clz */ 452ed623dbefb52ca3211490d656abc999a129df060cerion Pin_MulL, /* widening multiply */ 453ed623dbefb52ca3211490d656abc999a129df060cerion Pin_Div, /* div */ 454ed623dbefb52ca3211490d656abc999a129df060cerion Pin_Call, /* call to address in register */ 4553dee849ec7c38746749065e67dc53b75daa7617dsewardj Pin_XDirect, /* direct transfer to GA */ 4563dee849ec7c38746749065e67dc53b75daa7617dsewardj Pin_XIndir, /* indirect transfer to GA */ 4573dee849ec7c38746749065e67dc53b75daa7617dsewardj Pin_XAssisted, /* assisted transfer to GA */ 458f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion Pin_CMov, /* conditional move */ 4597fd5bb0dd6e9b745f8f8452f15cebb3c628d0a22sewardj Pin_Load, /* zero-extending load a 8|16|32|64 bit value from mem */ 460e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj Pin_LoadL, /* load-linked (lwarx/ldarx) 32|64 bit value from mem */ 4615b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion Pin_Store, /* store a 8|16|32|64 bit value to mem */ 462e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj Pin_StoreC, /* store-conditional (stwcx./stdcx.) 32|64 bit val */ 4635b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion Pin_Set, /* convert condition code to value 0 or 1 */ 464b51f0f4f33256638ed953156a2635aa739b232f1sewardj Pin_MfCR, /* move from condition register to GPR */ 465b51f0f4f33256638ed953156a2635aa739b232f1sewardj Pin_MFence, /* mem fence */ 466c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion 467094d1397b3f69b1a538e80ab509ea8cd75f4be3bcerion Pin_FpUnary, /* FP unary op */ 468094d1397b3f69b1a538e80ab509ea8cd75f4be3bcerion Pin_FpBinary, /* FP binary op */ 46940c802659108a96bb87cbc1a30b7b77e2abd0829sewardj Pin_FpMulAcc, /* FP multipy-accumulate style op */ 470094d1397b3f69b1a538e80ab509ea8cd75f4be3bcerion Pin_FpLdSt, /* FP load/store */ 47192923de6a68e5c84365b1fe5799c79815fd7d8e6sewardj Pin_FpSTFIW, /* stfiwx */ 47292923de6a68e5c84365b1fe5799c79815fd7d8e6sewardj Pin_FpRSP, /* FP round IEEE754 double to IEEE754 single */ 4737d810d793616af057ce861746aa985df3304cb86sewardj Pin_FpCftI, /* fcfid[u,s,us]/fctid[u]/fctiw[u] */ 474094d1397b3f69b1a538e80ab509ea8cd75f4be3bcerion Pin_FpCMov, /* FP floating point conditional move */ 475094d1397b3f69b1a538e80ab509ea8cd75f4be3bcerion Pin_FpLdFPSCR, /* mtfsf */ 476094d1397b3f69b1a538e80ab509ea8cd75f4be3bcerion Pin_FpCmp, /* FP compare, generating value into int reg */ 47792923de6a68e5c84365b1fe5799c79815fd7d8e6sewardj 478c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion Pin_RdWrLR, /* Read/Write Link Register */ 479c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion 480c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion Pin_AvLdSt, /* AV load/store (kludging for AMode_IR) */ 481c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion Pin_AvUnary, /* AV unary general reg=>reg */ 4826b6f59eabd7c38edf6732b8e127eb2913b44cbf6cerion 483c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion Pin_AvBinary, /* AV binary general reg,reg=>reg */ 4846b6f59eabd7c38edf6732b8e127eb2913b44cbf6cerion Pin_AvBin8x16, /* AV binary, 8x4 */ 4856b6f59eabd7c38edf6732b8e127eb2913b44cbf6cerion Pin_AvBin16x8, /* AV binary, 16x4 */ 4866b6f59eabd7c38edf6732b8e127eb2913b44cbf6cerion Pin_AvBin32x4, /* AV binary, 32x4 */ 4870c74bb5aa3240f693df0568d578baabf0c376dc4carll Pin_AvBin64x2, /* AV binary, 64x2 */ 4886b6f59eabd7c38edf6732b8e127eb2913b44cbf6cerion 4896b6f59eabd7c38edf6732b8e127eb2913b44cbf6cerion Pin_AvBin32Fx4, /* AV FP binary, 32Fx4 */ 4908ea0d3ebfb8b1e4d8b6f851b0079c47a9886c686cerion Pin_AvUn32Fx4, /* AV FP unary, 32Fx4 */ 491c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion 492c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion Pin_AvPerm, /* AV permute (shuffle) */ 493c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion Pin_AvSel, /* AV select */ 4949877fe5792c32f04fa31018a72928903031a12e8carll Pin_AvSh, /* AV shift left or right */ 495c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion Pin_AvShlDbl, /* AV shift-left double by imm */ 496c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion Pin_AvSplat, /* One elem repeated throughout dst */ 4976b6f59eabd7c38edf6732b8e127eb2913b44cbf6cerion Pin_AvLdVSCR, /* mtvscr */ 498c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj Pin_AvCMov, /* AV conditional move */ 4997deaf9552b546b847528cf39b38898fb7742b5f5carll Pin_AvCipherV128Unary, /* AV Vector unary Cipher */ 5007deaf9552b546b847528cf39b38898fb7742b5f5carll Pin_AvCipherV128Binary, /* AV Vector binary Cipher */ 5017deaf9552b546b847528cf39b38898fb7742b5f5carll Pin_AvHashV128Binary, /* AV Vector binary Hash */ 5027deaf9552b546b847528cf39b38898fb7742b5f5carll Pin_AvBCDV128Trinary, /* BCD Arithmetic */ 503c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj Pin_Dfp64Unary, /* DFP64 unary op */ 50426217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj Pin_Dfp128Unary, /* DFP128 unary op */ 50526217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj Pin_DfpShift, /* Decimal floating point shift by immediate value */ 506c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj Pin_Dfp64Binary, /* DFP64 binary op */ 50726217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj Pin_Dfp128Binary, /* DFP128 binary op */ 50826217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj Pin_DfpShift128, /* 128-bit Decimal floating point shift by 50926217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj * immediate value */ 51026217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj Pin_DfpD128toD64, /* DFP 128 to DFP 64 op */ 51126217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj Pin_DfpI64StoD128, /* DFP signed integer to DFP 128 */ 512cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj Pin_DfpRound, /* D64 round to D64 */ 513cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj Pin_DfpRound128, /* D128 round to D128 */ 514cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj Pin_ExtractExpD128, /* DFP, extract 64 bit exponent */ 515cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj Pin_InsertExpD128, /* DFP, insert 64 bit exponent and 128 bit binary 516cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj * significand into a DFP 128-bit value*/ 517cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj Pin_Dfp64Cmp, /* DFP 64-bit compare, generating value into 518cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj * int reg */ 519cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj Pin_Dfp128Cmp, /* DFP 128-bit compare, generating value into 520cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj * int reg */ 521cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj Pin_DfpQuantize, /* D64 quantize using register value, significance 522cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj * round */ 523cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj Pin_DfpQuantize128, /* D128 quantize using register value, significance 524cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj * round */ 5253dee849ec7c38746749065e67dc53b75daa7617dsewardj Pin_EvCheck, /* Event check */ 5263dee849ec7c38746749065e67dc53b75daa7617dsewardj Pin_ProfInc /* 64-bit profile counter increment */ 527bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion } 5285b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCInstrTag; 529bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion 530cd304497d9d869f9b24a002299d3953ee072229bcerion/* Destinations are on the LEFT (first operand) */ 531bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion 532bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fceriontypedef 533bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion struct { 5345b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCInstrTag tag; 535cd304497d9d869f9b24a002299d3953ee072229bcerion union { 5365b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion /* Get a 32/64-bit literal into a register. 5375b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion May turn into a number of real insns. */ 538b51f0f4f33256638ed953156a2635aa739b232f1sewardj struct { 539b51f0f4f33256638ed953156a2635aa739b232f1sewardj HReg dst; 540f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion ULong imm64; 541f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion } LI; 542bb01b7cbfd84c27dd213f67a144ea5a99af36961cerion /* Integer add/sub/and/or/xor. Limitations: 543b51f0f4f33256638ed953156a2635aa739b232f1sewardj - For add, the immediate, if it exists, is a signed 16. 544b51f0f4f33256638ed953156a2635aa739b232f1sewardj - For sub, the immediate, if it exists, is a signed 16 545b51f0f4f33256638ed953156a2635aa739b232f1sewardj which may not be -32768, since no such instruction 546b51f0f4f33256638ed953156a2635aa739b232f1sewardj exists, and so we have to emit addi with +32768, but 547b51f0f4f33256638ed953156a2635aa739b232f1sewardj that is not possible. 548b51f0f4f33256638ed953156a2635aa739b232f1sewardj - For and/or/xor, the immediate, if it exists, 549b51f0f4f33256638ed953156a2635aa739b232f1sewardj is an unsigned 16. 550b51f0f4f33256638ed953156a2635aa739b232f1sewardj */ 551cd304497d9d869f9b24a002299d3953ee072229bcerion struct { 5525b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCAluOp op; 5535b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion HReg dst; 5545b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion HReg srcL; 5555b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCRH* srcR; 556f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion } Alu; 557bb01b7cbfd84c27dd213f67a144ea5a99af36961cerion /* Integer shl/shr/sar. 558bb01b7cbfd84c27dd213f67a144ea5a99af36961cerion Limitations: the immediate, if it exists, 559bb01b7cbfd84c27dd213f67a144ea5a99af36961cerion is a signed 5-bit value between 1 and 31 inclusive. 560bb01b7cbfd84c27dd213f67a144ea5a99af36961cerion */ 561bb01b7cbfd84c27dd213f67a144ea5a99af36961cerion struct { 5625b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCShftOp op; 5635b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion Bool sz32; /* mode64 has both 32 and 64bit shft */ 5645b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion HReg dst; 5655b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion HReg srcL; 5665b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCRH* srcR; 567bb01b7cbfd84c27dd213f67a144ea5a99af36961cerion } Shft; 5684a49b0393204185f87664ea58f2b7a2ae1d37338cerion /* */ 5694a49b0393204185f87664ea58f2b7a2ae1d37338cerion struct { 5704a49b0393204185f87664ea58f2b7a2ae1d37338cerion Bool isAdd; /* else sub */ 5714a49b0393204185f87664ea58f2b7a2ae1d37338cerion Bool setC; /* else read carry */ 5724a49b0393204185f87664ea58f2b7a2ae1d37338cerion HReg dst; 5734a49b0393204185f87664ea58f2b7a2ae1d37338cerion HReg srcL; 5744a49b0393204185f87664ea58f2b7a2ae1d37338cerion HReg srcR; 5755b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion } AddSubC; 576b51f0f4f33256638ed953156a2635aa739b232f1sewardj /* If signed, the immediate, if it exists, is a signed 16, 577b51f0f4f33256638ed953156a2635aa739b232f1sewardj else it is an unsigned 16. */ 578cd304497d9d869f9b24a002299d3953ee072229bcerion struct { 5795b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion Bool syned; 5805b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion Bool sz32; /* mode64 has both 32 and 64bit cmp */ 5815b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion UInt crfD; 5825b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion HReg srcL; 5835b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCRH* srcR; 584f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion } Cmp; 5857fd5bb0dd6e9b745f8f8452f15cebb3c628d0a22sewardj /* Not, Neg, Clz32/64, Extsw */ 5862c49e036c365df707cd8e6622d66382f380557b2cerion struct { 5875b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCUnaryOp op; 5885b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion HReg dst; 5895b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion HReg src; 5905b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion } Unary; 59192f5dc7ca4f50145028c4baebc783d196dfb67a2cerion struct { 592b51f0f4f33256638ed953156a2635aa739b232f1sewardj Bool syned; /* meaningless if hi32==False */ 593f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion Bool hi; /* False=>low, True=>high */ 594bb01b7cbfd84c27dd213f67a144ea5a99af36961cerion Bool sz32; /* mode64 has both 32 & 64bit mull */ 595b51f0f4f33256638ed953156a2635aa739b232f1sewardj HReg dst; 596b51f0f4f33256638ed953156a2635aa739b232f1sewardj HReg srcL; 597b51f0f4f33256638ed953156a2635aa739b232f1sewardj HReg srcR; 59892f5dc7ca4f50145028c4baebc783d196dfb67a2cerion } MulL; 5999e263e3c24fcd4fd84855fe4f048884fb24a3a65cerion /* ppc32 div/divu instruction. */ 600c0e707e9b29f43821a5b505a468107992426aa7ecerion struct { 6014aa412af1d8166cc11f39a6e721df49431d23618sewardj Bool extended; 60233aa6da1102a12139debec996c33e4effa16f77ccerion Bool syned; 603bb01b7cbfd84c27dd213f67a144ea5a99af36961cerion Bool sz32; /* mode64 has both 32 & 64bit div */ 60433aa6da1102a12139debec996c33e4effa16f77ccerion HReg dst; 605a2f75883f769b3cf13c32d5321cc9a6b7fcea9a6cerion HReg srcL; 606a2f75883f769b3cf13c32d5321cc9a6b7fcea9a6cerion HReg srcR; 607c0e707e9b29f43821a5b505a468107992426aa7ecerion } Div; 6082c49e036c365df707cd8e6622d66382f380557b2cerion /* Pseudo-insn. Call target (an absolute address), on given 6096a64a9f0eddb932c55c2cd6c2c2ad2c6c4b6cafasewardj condition (which could be Pct_ALWAYS). argiregs indicates 6106a64a9f0eddb932c55c2cd6c2c2ad2c6c4b6cafasewardj which of r3 .. r10 carries argument values for this call, 6116a64a9f0eddb932c55c2cd6c2c2ad2c6c4b6cafasewardj using a bit mask (1<<N is set if rN holds an arg, for N in 6126a64a9f0eddb932c55c2cd6c2c2ad2c6c4b6cafasewardj 3 .. 10 inclusive). */ 6132c49e036c365df707cd8e6622d66382f380557b2cerion struct { 6145b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCCondCode cond; 6155b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion Addr64 target; 6165b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion UInt argiregs; 617cfe046e178666280b87da998b1b52ecda03ecd89sewardj RetLoc rloc; /* where the return value will be */ 6182c49e036c365df707cd8e6622d66382f380557b2cerion } Call; 6193dee849ec7c38746749065e67dc53b75daa7617dsewardj /* Update the guest CIA value, then exit requesting to chain 6203dee849ec7c38746749065e67dc53b75daa7617dsewardj to it. May be conditional. Use of Addr64 in order to cope 6213dee849ec7c38746749065e67dc53b75daa7617dsewardj with 64-bit hosts. */ 6222c49e036c365df707cd8e6622d66382f380557b2cerion struct { 6233dee849ec7c38746749065e67dc53b75daa7617dsewardj Addr64 dstGA; /* next guest address */ 6243dee849ec7c38746749065e67dc53b75daa7617dsewardj PPCAMode* amCIA; /* amode in guest state for CIA */ 6253dee849ec7c38746749065e67dc53b75daa7617dsewardj PPCCondCode cond; /* can be ALWAYS */ 6263dee849ec7c38746749065e67dc53b75daa7617dsewardj Bool toFastEP; /* chain to the slow or fast point? */ 6273dee849ec7c38746749065e67dc53b75daa7617dsewardj } XDirect; 6283dee849ec7c38746749065e67dc53b75daa7617dsewardj /* Boring transfer to a guest address not known at JIT time. 6293dee849ec7c38746749065e67dc53b75daa7617dsewardj Not chainable. May be conditional. */ 6303dee849ec7c38746749065e67dc53b75daa7617dsewardj struct { 6313dee849ec7c38746749065e67dc53b75daa7617dsewardj HReg dstGA; 6323dee849ec7c38746749065e67dc53b75daa7617dsewardj PPCAMode* amCIA; 6333dee849ec7c38746749065e67dc53b75daa7617dsewardj PPCCondCode cond; /* can be ALWAYS */ 6343dee849ec7c38746749065e67dc53b75daa7617dsewardj } XIndir; 6353dee849ec7c38746749065e67dc53b75daa7617dsewardj /* Assisted transfer to a guest address, most general case. 6363dee849ec7c38746749065e67dc53b75daa7617dsewardj Not chainable. May be conditional. */ 6373dee849ec7c38746749065e67dc53b75daa7617dsewardj struct { 6383dee849ec7c38746749065e67dc53b75daa7617dsewardj HReg dstGA; 6393dee849ec7c38746749065e67dc53b75daa7617dsewardj PPCAMode* amCIA; 6403dee849ec7c38746749065e67dc53b75daa7617dsewardj PPCCondCode cond; /* can be ALWAYS */ 6415b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion IRJumpKind jk; 6423dee849ec7c38746749065e67dc53b75daa7617dsewardj } XAssisted; 643b536af93912b69421440c27aa0533ad77d678f85cerion /* Mov src to dst on the given condition, which may not 6449abfcbca0696407c4b781b9395298c5edffa33a0cerion be the bogus Pct_ALWAYS. */ 645b536af93912b69421440c27aa0533ad77d678f85cerion struct { 6465b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCCondCode cond; 6475b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion HReg dst; 6485b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCRI* src; 649f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion } CMov; 6507fd5bb0dd6e9b745f8f8452f15cebb3c628d0a22sewardj /* Zero extending loads. Dst size is host word size */ 651cd304497d9d869f9b24a002299d3953ee072229bcerion struct { 6525b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion UChar sz; /* 1|2|4|8 */ 6535b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion HReg dst; 6545b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCAMode* src; 6557cf8e4e86f4d055ccb2d0c681c76100960a8e235cerion } Load; 656e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj /* Load-and-reserve (lwarx, ldarx) */ 657e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj struct { 658e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj UChar sz; /* 4|8 */ 659e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj HReg dst; 660e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj HReg src; 661e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj } LoadL; 6625b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion /* 64/32/16/8 bit stores */ 663cd304497d9d869f9b24a002299d3953ee072229bcerion struct { 6645b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion UChar sz; /* 1|2|4|8 */ 6655b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCAMode* dst; 6665b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion HReg src; 667cd304497d9d869f9b24a002299d3953ee072229bcerion } Store; 668e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj /* Store-conditional (stwcx., stdcx.) */ 669e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj struct { 670e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj UChar sz; /* 4|8 */ 671e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj HReg dst; 672e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj HReg src; 673e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj } StoreC; 6745b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion /* Convert a ppc condition code to value 0 or 1. */ 675b536af93912b69421440c27aa0533ad77d678f85cerion struct { 6765b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCCondCode cond; 6775b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion HReg dst; 6785b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion } Set; 679b51f0f4f33256638ed953156a2635aa739b232f1sewardj /* Move the entire CR to a GPR */ 680b51f0f4f33256638ed953156a2635aa739b232f1sewardj struct { 681b51f0f4f33256638ed953156a2635aa739b232f1sewardj HReg dst; 682b51f0f4f33256638ed953156a2635aa739b232f1sewardj } MfCR; 68398411db016ecb3bd1b8b72f75e4e3a49c95f4882cerion /* Mem fence. In short, an insn which flushes all preceding 68498411db016ecb3bd1b8b72f75e4e3a49c95f4882cerion loads and stores as much as possible before continuing. 6855b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion On PPC we emit a "sync". */ 68692f5dc7ca4f50145028c4baebc783d196dfb67a2cerion struct { 68792f5dc7ca4f50145028c4baebc783d196dfb67a2cerion } MFence; 688cd304497d9d869f9b24a002299d3953ee072229bcerion 6895b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion /* PPC Floating point */ 690094d1397b3f69b1a538e80ab509ea8cd75f4be3bcerion struct { 6915b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCFpOp op; 6925b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion HReg dst; 6935b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion HReg src; 694094d1397b3f69b1a538e80ab509ea8cd75f4be3bcerion } FpUnary; 695094d1397b3f69b1a538e80ab509ea8cd75f4be3bcerion struct { 6965b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCFpOp op; 6975b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion HReg dst; 6985b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion HReg srcL; 6995b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion HReg srcR; 700094d1397b3f69b1a538e80ab509ea8cd75f4be3bcerion } FpBinary; 701094d1397b3f69b1a538e80ab509ea8cd75f4be3bcerion struct { 70240c802659108a96bb87cbc1a30b7b77e2abd0829sewardj PPCFpOp op; 70340c802659108a96bb87cbc1a30b7b77e2abd0829sewardj HReg dst; 70440c802659108a96bb87cbc1a30b7b77e2abd0829sewardj HReg srcML; 70540c802659108a96bb87cbc1a30b7b77e2abd0829sewardj HReg srcMR; 70640c802659108a96bb87cbc1a30b7b77e2abd0829sewardj HReg srcAcc; 70740c802659108a96bb87cbc1a30b7b77e2abd0829sewardj } FpMulAcc; 70840c802659108a96bb87cbc1a30b7b77e2abd0829sewardj struct { 7095b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion Bool isLoad; 7105b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion UChar sz; /* only 4 (IEEE single) or 8 (IEEE double) */ 7115b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion HReg reg; 7125b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCAMode* addr; 713094d1397b3f69b1a538e80ab509ea8cd75f4be3bcerion } FpLdSt; 714094d1397b3f69b1a538e80ab509ea8cd75f4be3bcerion struct { 71592923de6a68e5c84365b1fe5799c79815fd7d8e6sewardj HReg addr; /* int reg */ 71692923de6a68e5c84365b1fe5799c79815fd7d8e6sewardj HReg data; /* float reg */ 71792923de6a68e5c84365b1fe5799c79815fd7d8e6sewardj } FpSTFIW; 71892923de6a68e5c84365b1fe5799c79815fd7d8e6sewardj /* Round 64-bit FP value to 32-bit FP value in an FP reg. */ 71907b07a966a2fdbcf621251a0c1a8ab84807fb120cerion struct { 72007b07a966a2fdbcf621251a0c1a8ab84807fb120cerion HReg src; 72107b07a966a2fdbcf621251a0c1a8ab84807fb120cerion HReg dst; 72292923de6a68e5c84365b1fe5799c79815fd7d8e6sewardj } FpRSP; 7237d810d793616af057ce861746aa985df3304cb86sewardj /* fcfid[u,s,us]/fctid[u]/fctiw[u]. Only some combinations 7247d810d793616af057ce861746aa985df3304cb86sewardj of the various fields are allowed. This is asserted for 7257d810d793616af057ce861746aa985df3304cb86sewardj and documented in the code for the constructor, 7267d810d793616af057ce861746aa985df3304cb86sewardj PPCInstr_FpCftI, in host_ppc_defs.c. */ 72707b07a966a2fdbcf621251a0c1a8ab84807fb120cerion struct { 7287d810d793616af057ce861746aa985df3304cb86sewardj Bool fromI; /* True== I->F, False== F->I */ 7297d810d793616af057ce861746aa985df3304cb86sewardj Bool int32; /* True== I is 32, False== I is 64 */ 73066d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj Bool syned; 7317d810d793616af057ce861746aa985df3304cb86sewardj Bool flt64; /* True== F is 64, False== F is 32 */ 73207b07a966a2fdbcf621251a0c1a8ab84807fb120cerion HReg src; 73307b07a966a2fdbcf621251a0c1a8ab84807fb120cerion HReg dst; 73492923de6a68e5c84365b1fe5799c79815fd7d8e6sewardj } FpCftI; 73592923de6a68e5c84365b1fe5799c79815fd7d8e6sewardj /* FP mov src to dst on the given condition. */ 736094d1397b3f69b1a538e80ab509ea8cd75f4be3bcerion struct { 7375b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCCondCode cond; 7385b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion HReg dst; 7395b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion HReg src; 740094d1397b3f69b1a538e80ab509ea8cd75f4be3bcerion } FpCMov; 741094d1397b3f69b1a538e80ab509ea8cd75f4be3bcerion /* Load FP Status & Control Register */ 742094d1397b3f69b1a538e80ab509ea8cd75f4be3bcerion struct { 743094d1397b3f69b1a538e80ab509ea8cd75f4be3bcerion HReg src; 744c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj UInt dfp_rm; 745094d1397b3f69b1a538e80ab509ea8cd75f4be3bcerion } FpLdFPSCR; 746b51f0f4f33256638ed953156a2635aa739b232f1sewardj /* Do a compare, generating result into an int register. */ 747094d1397b3f69b1a538e80ab509ea8cd75f4be3bcerion struct { 748094d1397b3f69b1a538e80ab509ea8cd75f4be3bcerion UChar crfD; 749094d1397b3f69b1a538e80ab509ea8cd75f4be3bcerion HReg dst; 750094d1397b3f69b1a538e80ab509ea8cd75f4be3bcerion HReg srcL; 751094d1397b3f69b1a538e80ab509ea8cd75f4be3bcerion HReg srcR; 752094d1397b3f69b1a538e80ab509ea8cd75f4be3bcerion } FpCmp; 753cd304497d9d869f9b24a002299d3953ee072229bcerion 7547f000af9c21e3b5059e0b2d26bcb9ca378ae0e54cerion /* Read/Write Link Register */ 7557f000af9c21e3b5059e0b2d26bcb9ca378ae0e54cerion struct { 7567f000af9c21e3b5059e0b2d26bcb9ca378ae0e54cerion Bool wrLR; 7577f000af9c21e3b5059e0b2d26bcb9ca378ae0e54cerion HReg gpr; 7587f000af9c21e3b5059e0b2d26bcb9ca378ae0e54cerion } RdWrLR; 759c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion 760c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion /* Simplistic AltiVec */ 761c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion struct { 7625b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion Bool isLoad; 7635b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion UChar sz; /* 8|16|32|128 */ 7645b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion HReg reg; 7655b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCAMode* addr; 766c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion } AvLdSt; 767c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion struct { 7685b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCAvOp op; 7695b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion HReg dst; 7705b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion HReg src; 771c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion } AvUnary; 772c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion struct { 7735b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCAvOp op; 7745b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion HReg dst; 7755b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion HReg srcL; 7765b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion HReg srcR; 777c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion } AvBinary; 7786b6f59eabd7c38edf6732b8e127eb2913b44cbf6cerion struct { 7795b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCAvOp op; 7805b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion HReg dst; 7815b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion HReg srcL; 7825b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion HReg srcR; 7836b6f59eabd7c38edf6732b8e127eb2913b44cbf6cerion } AvBin8x16; 7846b6f59eabd7c38edf6732b8e127eb2913b44cbf6cerion struct { 7855b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCAvOp op; 7865b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion HReg dst; 7875b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion HReg srcL; 7885b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion HReg srcR; 7896b6f59eabd7c38edf6732b8e127eb2913b44cbf6cerion } AvBin16x8; 7906b6f59eabd7c38edf6732b8e127eb2913b44cbf6cerion struct { 7915b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCAvOp op; 7925b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion HReg dst; 7935b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion HReg srcL; 7945b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion HReg srcR; 7956b6f59eabd7c38edf6732b8e127eb2913b44cbf6cerion } AvBin32x4; 7960c74bb5aa3240f693df0568d578baabf0c376dc4carll /* Can only be generated for CPUs capable of ISA 2.07 or above */ 7970c74bb5aa3240f693df0568d578baabf0c376dc4carll struct { 7980c74bb5aa3240f693df0568d578baabf0c376dc4carll PPCAvOp op; 7990c74bb5aa3240f693df0568d578baabf0c376dc4carll HReg dst; 8000c74bb5aa3240f693df0568d578baabf0c376dc4carll HReg srcL; 8010c74bb5aa3240f693df0568d578baabf0c376dc4carll HReg srcR; 8020c74bb5aa3240f693df0568d578baabf0c376dc4carll } AvBin64x2; 8036b6f59eabd7c38edf6732b8e127eb2913b44cbf6cerion struct { 8045b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCAvFpOp op; 8056b6f59eabd7c38edf6732b8e127eb2913b44cbf6cerion HReg dst; 8066b6f59eabd7c38edf6732b8e127eb2913b44cbf6cerion HReg srcL; 8076b6f59eabd7c38edf6732b8e127eb2913b44cbf6cerion HReg srcR; 8086b6f59eabd7c38edf6732b8e127eb2913b44cbf6cerion } AvBin32Fx4; 8098ea0d3ebfb8b1e4d8b6f851b0079c47a9886c686cerion struct { 8105b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCAvFpOp op; 8118ea0d3ebfb8b1e4d8b6f851b0079c47a9886c686cerion HReg dst; 8128ea0d3ebfb8b1e4d8b6f851b0079c47a9886c686cerion HReg src; 8138ea0d3ebfb8b1e4d8b6f851b0079c47a9886c686cerion } AvUn32Fx4; 814c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion /* Perm,Sel,SlDbl,Splat are all weird AV permutations */ 815c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion struct { 816c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion HReg dst; 817c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion HReg srcL; 818c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion HReg srcR; 81992d9d876af80d14fa2f319f7109964f2d6231f15cerion HReg ctl; 820c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion } AvPerm; 821c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion struct { 822c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion HReg dst; 823c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion HReg srcL; 824c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion HReg srcR; 82592d9d876af80d14fa2f319f7109964f2d6231f15cerion HReg ctl; 826c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion } AvSel; 827c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion struct { 8289877fe5792c32f04fa31018a72928903031a12e8carll Bool shLeft; 8299877fe5792c32f04fa31018a72928903031a12e8carll HReg dst; 83099de41eb08d8af693427594504313ecc8949fe21carll PPCAMode* addr; 8319877fe5792c32f04fa31018a72928903031a12e8carll } AvSh; 8329877fe5792c32f04fa31018a72928903031a12e8carll struct { 833c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion UChar shift; 834c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion HReg dst; 835c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion HReg srcL; 836c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion HReg srcR; 837c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion } AvShlDbl; 838c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion struct { 839c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion UChar sz; /* 8,16,32 */ 840c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion HReg dst; 8415b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCVI5s* src; 842c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion } AvSplat; 8436b6f59eabd7c38edf6732b8e127eb2913b44cbf6cerion /* Mov src to dst on the given condition, which may not 8446b6f59eabd7c38edf6732b8e127eb2913b44cbf6cerion be the bogus Xcc_ALWAYS. */ 8456b6f59eabd7c38edf6732b8e127eb2913b44cbf6cerion struct { 8465b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCCondCode cond; 8475b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion HReg dst; 8485b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion HReg src; 8496b6f59eabd7c38edf6732b8e127eb2913b44cbf6cerion } AvCMov; 850b51f0f4f33256638ed953156a2635aa739b232f1sewardj /* Load AltiVec Status & Control Register */ 851c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion struct { 852c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion HReg src; 853c3d8bdcb51893e6d23ab9b27122741208a044cf1cerion } AvLdVSCR; 854c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj struct { 8557deaf9552b546b847528cf39b38898fb7742b5f5carll PPCAvOp op; 8567deaf9552b546b847528cf39b38898fb7742b5f5carll HReg dst; 8577deaf9552b546b847528cf39b38898fb7742b5f5carll HReg src; 8587deaf9552b546b847528cf39b38898fb7742b5f5carll } AvCipherV128Unary; 8597deaf9552b546b847528cf39b38898fb7742b5f5carll struct { 8607deaf9552b546b847528cf39b38898fb7742b5f5carll PPCAvOp op; 8617deaf9552b546b847528cf39b38898fb7742b5f5carll HReg dst; 8627deaf9552b546b847528cf39b38898fb7742b5f5carll HReg src; 8637deaf9552b546b847528cf39b38898fb7742b5f5carll PPCRI* s_field; 8647deaf9552b546b847528cf39b38898fb7742b5f5carll } AvHashV128Binary; 8657deaf9552b546b847528cf39b38898fb7742b5f5carll struct { 8667deaf9552b546b847528cf39b38898fb7742b5f5carll PPCAvOp op; 8677deaf9552b546b847528cf39b38898fb7742b5f5carll HReg dst; 8687deaf9552b546b847528cf39b38898fb7742b5f5carll HReg src1; 8697deaf9552b546b847528cf39b38898fb7742b5f5carll HReg src2; 8707deaf9552b546b847528cf39b38898fb7742b5f5carll PPCRI* ps; 8717deaf9552b546b847528cf39b38898fb7742b5f5carll } AvBCDV128Trinary; 8727deaf9552b546b847528cf39b38898fb7742b5f5carll struct { 8737deaf9552b546b847528cf39b38898fb7742b5f5carll PPCAvOp op; 8747deaf9552b546b847528cf39b38898fb7742b5f5carll HReg dst; 8757deaf9552b546b847528cf39b38898fb7742b5f5carll HReg srcL; 8767deaf9552b546b847528cf39b38898fb7742b5f5carll HReg srcR; 8777deaf9552b546b847528cf39b38898fb7742b5f5carll } AvCipherV128Binary; 8787deaf9552b546b847528cf39b38898fb7742b5f5carll struct { 879c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj PPCFpOp op; 880c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj HReg dst; 881c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj HReg src; 882c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj } Dfp64Unary; 883c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj struct { 884c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj PPCFpOp op; 885c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj HReg dst; 886c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj HReg srcL; 887c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj HReg srcR; 888c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj } Dfp64Binary; 889c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj struct { 890c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj PPCFpOp op; 89126217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj HReg dst; 89226217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj HReg src; 89326217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj PPCRI* shift; 89426217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj } DfpShift; 89526217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj struct { 89626217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj PPCFpOp op; 897c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj HReg dst_hi; 898c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj HReg dst_lo; 899c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj HReg src_hi; 900c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj HReg src_lo; 901c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj } Dfp128Unary; 902c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj struct { 903c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj /* The dst is used to pass the left source operand in and return 904c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj * the result. 905c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj */ 906c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj PPCFpOp op; 907c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj HReg dst_hi; 908c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj HReg dst_lo; 909c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj HReg srcR_hi; 910c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj HReg srcR_lo; 911c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj } Dfp128Binary; 91226217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj struct { 91326217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj PPCFpOp op; 91426217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj HReg dst_hi; 91526217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj HReg dst_lo; 91626217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj HReg src_hi; 91726217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj HReg src_lo; 91826217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj PPCRI* shift; 91926217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj } DfpShift128; 92026217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj struct { 921cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj HReg dst; 922cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj HReg src; 923cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj PPCRI* r_rmc; 924cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj } DfpRound; 925cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj struct { 926cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj HReg dst_hi; 927cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj HReg dst_lo; 928cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj HReg src_hi; 929cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj HReg src_lo; 930cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj PPCRI* r_rmc; 931cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj } DfpRound128; 932cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj struct { 933cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj PPCFpOp op; 934cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj HReg dst; 935cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj HReg srcL; 936cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj HReg srcR; 937cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj PPCRI* rmc; 938cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj } DfpQuantize; 939cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj struct { 940cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj PPCFpOp op; 941cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj HReg dst_hi; 942cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj HReg dst_lo; 943cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj HReg src_hi; 944cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj HReg src_lo; 945cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj PPCRI* rmc; 946cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj } DfpQuantize128; 947cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj struct { 948cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj PPCFpOp op; 949cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj HReg dst; 950cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj HReg src_hi; 951cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj HReg src_lo; 952cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj } ExtractExpD128; 953cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj struct { 954cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj PPCFpOp op; 955cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj HReg dst_hi; 956cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj HReg dst_lo; 957cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj HReg srcL; 958cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj HReg srcR_hi; 959cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj HReg srcR_lo; 960cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj } InsertExpD128; 961cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj struct { 96226217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj PPCFpOp op; 96326217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj HReg dst; 96426217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj HReg src_hi; 96526217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj HReg src_lo; 96626217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj } DfpD128toD64; 96726217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj struct { 96826217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj PPCFpOp op; 96926217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj HReg dst_hi; 97026217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj HReg dst_lo; 97126217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj HReg src; 97226217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj } DfpI64StoD128; 9733dee849ec7c38746749065e67dc53b75daa7617dsewardj struct { 974cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj UChar crfD; 975cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj HReg dst; 976cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj HReg srcL; 977cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj HReg srcR; 978cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj } Dfp64Cmp; 979cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj struct { 980cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj UChar crfD; 981cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj HReg dst; 982cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj HReg srcL_hi; 983cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj HReg srcL_lo; 984cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj HReg srcR_hi; 985cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj HReg srcR_lo; 986cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj } Dfp128Cmp; 987cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj struct { 9883dee849ec7c38746749065e67dc53b75daa7617dsewardj PPCAMode* amCounter; 9893dee849ec7c38746749065e67dc53b75daa7617dsewardj PPCAMode* amFailAddr; 9903dee849ec7c38746749065e67dc53b75daa7617dsewardj } EvCheck; 9913dee849ec7c38746749065e67dc53b75daa7617dsewardj struct { 9923dee849ec7c38746749065e67dc53b75daa7617dsewardj /* No fields. The address of the counter to inc is 9933dee849ec7c38746749065e67dc53b75daa7617dsewardj installed later, post-translation, by patching it in, 9943dee849ec7c38746749065e67dc53b75daa7617dsewardj as it is not known at translation time. */ 9953dee849ec7c38746749065e67dc53b75daa7617dsewardj } ProfInc; 996c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj } Pin; 997bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion } 9985b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion PPCInstr; 9995b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion 10005b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion 10015b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern PPCInstr* PPCInstr_LI ( HReg, ULong, Bool ); 10025b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern PPCInstr* PPCInstr_Alu ( PPCAluOp, HReg, HReg, PPCRH* ); 10035b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern PPCInstr* PPCInstr_Shft ( PPCShftOp, Bool sz32, HReg, HReg, PPCRH* ); 10045b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern PPCInstr* PPCInstr_AddSubC ( Bool, Bool, HReg, HReg, HReg ); 10055b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern PPCInstr* PPCInstr_Cmp ( Bool, Bool, UInt, HReg, PPCRH* ); 10065b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern PPCInstr* PPCInstr_Unary ( PPCUnaryOp op, HReg dst, HReg src ); 10075b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern PPCInstr* PPCInstr_MulL ( Bool syned, Bool hi32, Bool sz32, HReg, HReg, HReg ); 10084aa412af1d8166cc11f39a6e721df49431d23618sewardjextern PPCInstr* PPCInstr_Div ( Bool extended, Bool syned, Bool sz32, HReg dst, HReg srcL, HReg srcR ); 1009cfe046e178666280b87da998b1b52ecda03ecd89sewardjextern PPCInstr* PPCInstr_Call ( PPCCondCode, Addr64, UInt, RetLoc ); 10103dee849ec7c38746749065e67dc53b75daa7617dsewardjextern PPCInstr* PPCInstr_XDirect ( Addr64 dstGA, PPCAMode* amCIA, 10113dee849ec7c38746749065e67dc53b75daa7617dsewardj PPCCondCode cond, Bool toFastEP ); 10123dee849ec7c38746749065e67dc53b75daa7617dsewardjextern PPCInstr* PPCInstr_XIndir ( HReg dstGA, PPCAMode* amCIA, 10133dee849ec7c38746749065e67dc53b75daa7617dsewardj PPCCondCode cond ); 10143dee849ec7c38746749065e67dc53b75daa7617dsewardjextern PPCInstr* PPCInstr_XAssisted ( HReg dstGA, PPCAMode* amCIA, 10153dee849ec7c38746749065e67dc53b75daa7617dsewardj PPCCondCode cond, IRJumpKind jk ); 10165b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern PPCInstr* PPCInstr_CMov ( PPCCondCode, HReg dst, PPCRI* src ); 10177fd5bb0dd6e9b745f8f8452f15cebb3c628d0a22sewardjextern PPCInstr* PPCInstr_Load ( UChar sz, 10185b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion HReg dst, PPCAMode* src, Bool mode64 ); 1019e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardjextern PPCInstr* PPCInstr_LoadL ( UChar sz, 1020e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj HReg dst, HReg src, Bool mode64 ); 10215b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern PPCInstr* PPCInstr_Store ( UChar sz, PPCAMode* dst, 10225b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion HReg src, Bool mode64 ); 1023e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardjextern PPCInstr* PPCInstr_StoreC ( UChar sz, HReg dst, HReg src, 1024e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj Bool mode64 ); 10255b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern PPCInstr* PPCInstr_Set ( PPCCondCode cond, HReg dst ); 10265b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern PPCInstr* PPCInstr_MfCR ( HReg dst ); 10275b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern PPCInstr* PPCInstr_MFence ( void ); 10285b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion 10295b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern PPCInstr* PPCInstr_FpUnary ( PPCFpOp op, HReg dst, HReg src ); 10305b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern PPCInstr* PPCInstr_FpBinary ( PPCFpOp op, HReg dst, HReg srcL, HReg srcR ); 103140c802659108a96bb87cbc1a30b7b77e2abd0829sewardjextern PPCInstr* PPCInstr_FpMulAcc ( PPCFpOp op, HReg dst, HReg srcML, 103240c802659108a96bb87cbc1a30b7b77e2abd0829sewardj HReg srcMR, HReg srcAcc ); 10335b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern PPCInstr* PPCInstr_FpLdSt ( Bool isLoad, UChar sz, HReg, PPCAMode* ); 103492923de6a68e5c84365b1fe5799c79815fd7d8e6sewardjextern PPCInstr* PPCInstr_FpSTFIW ( HReg addr, HReg data ); 103592923de6a68e5c84365b1fe5799c79815fd7d8e6sewardjextern PPCInstr* PPCInstr_FpRSP ( HReg dst, HReg src ); 103666d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardjextern PPCInstr* PPCInstr_FpCftI ( Bool fromI, Bool int32, Bool syned, 103766d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj Bool dst64, HReg dst, HReg src ); 10385b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern PPCInstr* PPCInstr_FpCMov ( PPCCondCode, HReg dst, HReg src ); 1039c6bbd470e9bd9898b84959227a406d3972d95f3bsewardjextern PPCInstr* PPCInstr_FpLdFPSCR ( HReg src, Bool dfp_rm ); 10405b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern PPCInstr* PPCInstr_FpCmp ( HReg dst, HReg srcL, HReg srcR ); 10415b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion 10425b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern PPCInstr* PPCInstr_RdWrLR ( Bool wrLR, HReg gpr ); 10435b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion 10445b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern PPCInstr* PPCInstr_AvLdSt ( Bool isLoad, UChar sz, HReg, PPCAMode* ); 10455b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern PPCInstr* PPCInstr_AvUnary ( PPCAvOp op, HReg dst, HReg src ); 10465b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern PPCInstr* PPCInstr_AvBinary ( PPCAvOp op, HReg dst, HReg srcL, HReg srcR ); 10475b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern PPCInstr* PPCInstr_AvBin8x16 ( PPCAvOp op, HReg dst, HReg srcL, HReg srcR ); 10485b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern PPCInstr* PPCInstr_AvBin16x8 ( PPCAvOp op, HReg dst, HReg srcL, HReg srcR ); 10495b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern PPCInstr* PPCInstr_AvBin32x4 ( PPCAvOp op, HReg dst, HReg srcL, HReg srcR ); 10500c74bb5aa3240f693df0568d578baabf0c376dc4carllextern PPCInstr* PPCInstr_AvBin64x2 ( PPCAvOp op, HReg dst, HReg srcL, HReg srcR ); 1051e522d4bbf9e59873859c2f0693450a176fb2b996sewardjextern PPCInstr* PPCInstr_AvBin32Fx4 ( PPCAvFpOp op, HReg dst, HReg srcL, HReg srcR ); 1052e522d4bbf9e59873859c2f0693450a176fb2b996sewardjextern PPCInstr* PPCInstr_AvUn32Fx4 ( PPCAvFpOp op, HReg dst, HReg src ); 10535b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern PPCInstr* PPCInstr_AvPerm ( HReg dst, HReg srcL, HReg srcR, HReg ctl ); 10545b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern PPCInstr* PPCInstr_AvSel ( HReg ctl, HReg dst, HReg srcL, HReg srcR ); 10559877fe5792c32f04fa31018a72928903031a12e8carllextern PPCInstr* PPCInstr_AvSh ( Bool shLeft, HReg dst, PPCAMode* am_addr ); 10565b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern PPCInstr* PPCInstr_AvShlDbl ( UChar shift, HReg dst, HReg srcL, HReg srcR ); 10575b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern PPCInstr* PPCInstr_AvSplat ( UChar sz, HReg dst, PPCVI5s* src ); 10585b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern PPCInstr* PPCInstr_AvCMov ( PPCCondCode, HReg dst, HReg src ); 10595b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionextern PPCInstr* PPCInstr_AvLdVSCR ( HReg src ); 10607deaf9552b546b847528cf39b38898fb7742b5f5carllextern PPCInstr* PPCInstr_AvCipherV128Unary ( PPCAvOp op, HReg dst, 10617deaf9552b546b847528cf39b38898fb7742b5f5carll HReg srcR ); 10627deaf9552b546b847528cf39b38898fb7742b5f5carllextern PPCInstr* PPCInstr_AvCipherV128Binary ( PPCAvOp op, HReg dst, 10637deaf9552b546b847528cf39b38898fb7742b5f5carll HReg srcL, HReg srcR ); 10647deaf9552b546b847528cf39b38898fb7742b5f5carllextern PPCInstr* PPCInstr_AvHashV128Binary ( PPCAvOp op, HReg dst, 10657deaf9552b546b847528cf39b38898fb7742b5f5carll HReg src, PPCRI* s_field ); 10667deaf9552b546b847528cf39b38898fb7742b5f5carllextern PPCInstr* PPCInstr_AvBCDV128Trinary ( PPCAvOp op, HReg dst, 10677deaf9552b546b847528cf39b38898fb7742b5f5carll HReg src1, HReg src2, 10687deaf9552b546b847528cf39b38898fb7742b5f5carll PPCRI* ps ); 1069c6bbd470e9bd9898b84959227a406d3972d95f3bsewardjextern PPCInstr* PPCInstr_Dfp64Unary ( PPCFpOp op, HReg dst, HReg src ); 1070c6bbd470e9bd9898b84959227a406d3972d95f3bsewardjextern PPCInstr* PPCInstr_Dfp64Binary ( PPCFpOp op, HReg dst, HReg srcL, 1071c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj HReg srcR ); 107226217b09205cc1801b842ba5ba8f0d83aabca1b4sewardjextern PPCInstr* PPCInstr_DfpShift ( PPCFpOp op, HReg dst, HReg src, 1073cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj PPCRI* shift ); 107426217b09205cc1801b842ba5ba8f0d83aabca1b4sewardjextern PPCInstr* PPCInstr_Dfp128Unary ( PPCFpOp op, HReg dst_hi, HReg dst_lo, 107526217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj HReg srcR_hi, HReg srcR_lo ); 107626217b09205cc1801b842ba5ba8f0d83aabca1b4sewardjextern PPCInstr* PPCInstr_Dfp128Binary ( PPCFpOp op, HReg dst_hi, HReg dst_lo, 107726217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj HReg srcR_hi, HReg srcR_lo ); 107826217b09205cc1801b842ba5ba8f0d83aabca1b4sewardjextern PPCInstr* PPCInstr_DfpShift128 ( PPCFpOp op, HReg dst_hi, HReg src_hi, 107926217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj HReg dst_lo, HReg src_lo, 108026217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj PPCRI* shift ); 108126217b09205cc1801b842ba5ba8f0d83aabca1b4sewardjextern PPCInstr* PPCInstr_DfpD128toD64 ( PPCFpOp op, HReg dst, 108226217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj HReg dst_lo, HReg src_lo); 1083cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardjextern PPCInstr* PPCInstr_DfpI64StoD128 ( PPCFpOp op, HReg dst_hi, 1084cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj HReg dst_lo, HReg src); 1085cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardjextern PPCInstr* PPCInstr_DfpRound ( HReg dst, HReg src, PPCRI* r_rmc ); 1086cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardjextern PPCInstr* PPCInstr_DfpRound128 ( HReg dst_hi, HReg dst_lo, HReg src_hi, 1087cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj HReg src_lo, PPCRI* r_rmc ); 1088a7b0d10848b63ff9d0608187c13134aded7a3c47florianextern PPCInstr* PPCInstr_DfpQuantize ( PPCFpOp op, HReg dst, HReg srcL, 1089cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj HReg srcR, PPCRI* rmc ); 1090a7b0d10848b63ff9d0608187c13134aded7a3c47florianextern PPCInstr* PPCInstr_DfpQuantize128 ( PPCFpOp op, HReg dst_hi, 1091cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj HReg dst_lo, 1092cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj HReg src_hi, 1093cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj HReg src_lo, PPCRI* rmc ); 1094cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardjextern PPCInstr* PPCInstr_ExtractExpD128 ( PPCFpOp op, HReg dst, 1095cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj HReg src_hi, HReg src_lo ); 1096cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardjextern PPCInstr* PPCInstr_InsertExpD128 ( PPCFpOp op, HReg dst_hi, 1097cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj HReg dst_lo, HReg srcL, 1098cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj HReg srcR_hi, HReg srcR_lo ); 1099cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardjextern PPCInstr* PPCInstr_Dfp64Cmp ( HReg dst, HReg srcL, HReg srcR ); 1100cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardjextern PPCInstr* PPCInstr_Dfp128Cmp ( HReg dst, HReg srcL_hi, HReg srcL_lo, 1101cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj HReg srcR_hi, HReg srcR_lo ); 11023dee849ec7c38746749065e67dc53b75daa7617dsewardjextern PPCInstr* PPCInstr_EvCheck ( PPCAMode* amCounter, 11033dee849ec7c38746749065e67dc53b75daa7617dsewardj PPCAMode* amFailAddr ); 11043dee849ec7c38746749065e67dc53b75daa7617dsewardjextern PPCInstr* PPCInstr_ProfInc ( void ); 1105c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj 1106d8c64e082224b2e688abdef9219cc76fd82b373bflorianextern void ppPPCInstr(const PPCInstr*, Bool mode64); 1107c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj 1108bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion 1109bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion/* Some functions that insulate the register allocator from details 1110bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion of the underlying instruction set. */ 1111d8c64e082224b2e688abdef9219cc76fd82b373bflorianextern void getRegUsage_PPCInstr ( HRegUsage*, const PPCInstr*, Bool mode64 ); 1112d8c64e082224b2e688abdef9219cc76fd82b373bflorianextern void mapRegs_PPCInstr ( HRegRemap*, PPCInstr* , Bool mode64); 1113d8c64e082224b2e688abdef9219cc76fd82b373bflorianextern Bool isMove_PPCInstr ( const PPCInstr*, HReg*, HReg* ); 11148462d113e3efeacceb304222dada8d85f748295aflorianextern Int emit_PPCInstr ( /*MB_MOD*/Bool* is_profInc, 1115d8c64e082224b2e688abdef9219cc76fd82b373bflorian UChar* buf, Int nbuf, const PPCInstr* i, 11168462d113e3efeacceb304222dada8d85f748295aflorian Bool mode64, 11178462d113e3efeacceb304222dada8d85f748295aflorian VexEndness endness_host, 11188462d113e3efeacceb304222dada8d85f748295aflorian const void* disp_cp_chain_me_to_slowEP, 11198462d113e3efeacceb304222dada8d85f748295aflorian const void* disp_cp_chain_me_to_fastEP, 11208462d113e3efeacceb304222dada8d85f748295aflorian const void* disp_cp_xindir, 11218462d113e3efeacceb304222dada8d85f748295aflorian const void* disp_cp_xassisted ); 11222a0cc858191d0ef9b5bb2072d6a164d4bc82b027sewardj 11232a0cc858191d0ef9b5bb2072d6a164d4bc82b027sewardjextern void genSpill_PPC ( /*OUT*/HInstr** i1, /*OUT*/HInstr** i2, 11242a0cc858191d0ef9b5bb2072d6a164d4bc82b027sewardj HReg rreg, Int offsetB, Bool mode64 ); 11252a0cc858191d0ef9b5bb2072d6a164d4bc82b027sewardjextern void genReload_PPC ( /*OUT*/HInstr** i1, /*OUT*/HInstr** i2, 11262a0cc858191d0ef9b5bb2072d6a164d4bc82b027sewardj HReg rreg, Int offsetB, Bool mode64 ); 11272a0cc858191d0ef9b5bb2072d6a164d4bc82b027sewardj 1128a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardjextern const RRegUniverse* getRRegUniverse_PPC ( Bool mode64 ); 1129a5b502299bfc9d97f4c2c9f61cdc1a0a65e1da61sewardj 1130cacba8e675988fbf21b08feea1f317a9c896c053florianextern HInstrArray* iselSB_PPC ( const IRSB*, 11313dee849ec7c38746749065e67dc53b75daa7617dsewardj VexArch, 1132d8c64e082224b2e688abdef9219cc76fd82b373bflorian const VexArchInfo*, 1133d8c64e082224b2e688abdef9219cc76fd82b373bflorian const VexAbiInfo*, 11343dee849ec7c38746749065e67dc53b75daa7617dsewardj Int offs_Host_EvC_Counter, 11353dee849ec7c38746749065e67dc53b75daa7617dsewardj Int offs_Host_EvC_FailAddr, 11363dee849ec7c38746749065e67dc53b75daa7617dsewardj Bool chainingAllowed, 11373dee849ec7c38746749065e67dc53b75daa7617dsewardj Bool addProfInc, 1138dcd6d236c9aef7d4c84369d4c51f6b92ac910127florian Addr max_ga ); 11393dee849ec7c38746749065e67dc53b75daa7617dsewardj 11403dee849ec7c38746749065e67dc53b75daa7617dsewardj/* How big is an event check? This is kind of a kludge because it 11413dee849ec7c38746749065e67dc53b75daa7617dsewardj depends on the offsets of host_EvC_FAILADDR and 11423dee849ec7c38746749065e67dc53b75daa7617dsewardj host_EvC_COUNTER. */ 11437ce2cc883c5b36586babec833838951ecf9f2a76florianextern Int evCheckSzB_PPC (void); 11443dee849ec7c38746749065e67dc53b75daa7617dsewardj 11453dee849ec7c38746749065e67dc53b75daa7617dsewardj/* Perform a chaining and unchaining of an XDirect jump. */ 11469b76916dcc1628e133d57db001563429c6e3a590sewardjextern VexInvalRange chainXDirect_PPC ( VexEndness endness_host, 11479b76916dcc1628e133d57db001563429c6e3a590sewardj void* place_to_chain, 11487d6f81de12e6d8deb3e119ab318f361d97a10a65florian const void* disp_cp_chain_me_EXPECTED, 11497d6f81de12e6d8deb3e119ab318f361d97a10a65florian const void* place_to_jump_to, 11503dee849ec7c38746749065e67dc53b75daa7617dsewardj Bool mode64 ); 11513dee849ec7c38746749065e67dc53b75daa7617dsewardj 11529b76916dcc1628e133d57db001563429c6e3a590sewardjextern VexInvalRange unchainXDirect_PPC ( VexEndness endness_host, 11539b76916dcc1628e133d57db001563429c6e3a590sewardj void* place_to_unchain, 11547d6f81de12e6d8deb3e119ab318f361d97a10a65florian const void* place_to_jump_to_EXPECTED, 11557d6f81de12e6d8deb3e119ab318f361d97a10a65florian const void* disp_cp_chain_me, 11563dee849ec7c38746749065e67dc53b75daa7617dsewardj Bool mode64 ); 11573dee849ec7c38746749065e67dc53b75daa7617dsewardj 11583dee849ec7c38746749065e67dc53b75daa7617dsewardj/* Patch the counter location into an existing ProfInc point. */ 11599b76916dcc1628e133d57db001563429c6e3a590sewardjextern VexInvalRange patchProfInc_PPC ( VexEndness endness_host, 11609b76916dcc1628e133d57db001563429c6e3a590sewardj void* place_to_patch, 11617d6f81de12e6d8deb3e119ab318f361d97a10a65florian const ULong* location_of_counter, 11623dee849ec7c38746749065e67dc53b75daa7617dsewardj Bool mode64 ); 11633dee849ec7c38746749065e67dc53b75daa7617dsewardj 11645b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion 1165cef7d3e3df4796e35b4521158d9dc058f034aa87sewardj#endif /* ndef __VEX_HOST_PPC_DEFS_H */ 1166bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion 1167bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion/*---------------------------------------------------------------*/ 1168cef7d3e3df4796e35b4521158d9dc058f034aa87sewardj/*--- end host_ppc_defs.h ---*/ 1169bcf8c3ed0466b8876535f68f9ca5c31f5fd8a26fcerion/*---------------------------------------------------------------*/ 1170