2c2
< // Copyright (c) 2010 ARM Limited
---
> // Copyright (c) 2010-2013 ARM Limited
82a83,103
> aarch64Read = '''
> ((xc->%(func)s(this, %(op_idx)s)) & mask(intWidth))
> '''
> aarch64Write = '''
> xc->%(func)s(this, %(op_idx)s, (%(final_val)s) & mask(intWidth))
> '''
> aarchX64Read = '''
> ((xc->%(func)s(this, %(op_idx)s)) & mask(aarch64 ? 64 : 32))
> '''
> aarchX64Write = '''
> xc->%(func)s(this, %(op_idx)s, (%(final_val)s) & mask(aarch64 ? 64 : 32))
> '''
> aarchW64Read = '''
> ((xc->%(func)s(this, %(op_idx)s)) & mask(32))
> '''
> aarchW64Write = '''
> xc->%(func)s(this, %(op_idx)s, (%(final_val)s) & mask(32))
> '''
> cntrlNsBankedWrite = '''
> xc->setMiscReg(flattenMiscRegNsBanked(dest, xc->tcBase()), %(final_val)s)
> '''
83a105,108
> cntrlNsBankedRead = '''
> xc->readMiscReg(flattenMiscRegNsBanked(op1, xc->tcBase()))
> '''
>
101a127,138
> def intReg64(idx):
> return ('IntReg', 'ud', idx, 'IsInteger', srtNormal,
> aarch64Read, aarch64Write)
>
> def intRegX64(idx, id = srtNormal):
> return ('IntReg', 'ud', idx, 'IsInteger', id,
> aarchX64Read, aarchX64Write)
>
> def intRegW64(idx, id = srtNormal):
> return ('IntReg', 'ud', idx, 'IsInteger', id,
> aarchW64Read, aarchW64Write)
>
122a160,165
> def cntrlNsBankedReg(idx, id = srtNormal, type = 'uw'):
> return ('ControlReg', type, idx, (None, None, 'IsControl'), id, cntrlNsBankedRead, cntrlNsBankedWrite)
>
> def cntrlNsBankedReg64(idx, id = srtNormal, type = 'ud'):
> return ('ControlReg', type, idx, (None, None, 'IsControl'), id, cntrlNsBankedRead, cntrlNsBankedWrite)
>
127c170
< return ('PCState', 'uw', idx, (None, None, 'IsControl'), id)
---
> return ('PCState', 'ud', idx, (None, None, 'IsControl'), id)
132a176,178
> 'Dest64': intReg64('dest'),
> 'XDest': intRegX64('dest'),
> 'WDest': intRegW64('dest'),
135a182,183
> 'XDest2': intRegX64('dest2'),
> 'FDest2': floatReg('dest2'),
136a185,186
> 'XResult': intRegX64('result'),
> 'XBase': intRegX64('base', id = srtBase),
137a188
> 'XOffset': intRegX64('offset'),
142a194,202
> 'Op164': intReg64('op1'),
> 'Op264': intReg64('op2'),
> 'Op364': intReg64('op3'),
> 'XOp1': intRegX64('op1'),
> 'XOp2': intRegX64('op2'),
> 'XOp3': intRegX64('op3'),
> 'WOp1': intRegW64('op1'),
> 'WOp2': intRegW64('op2'),
> 'WOp3': intRegW64('op3'),
149a210
> 'DecodedBankedIntReg': intRegNPC('decodeMrsMsrBankedIntRegIndex(byteMask, r)'),
150a212
> 'XLR': intRegX64('INTREG_X30'),
156a219,222
> 'X0': intRegX64('0'),
> 'X1': intRegX64('1'),
> 'X2': intRegX64('2'),
> 'X3': intRegX64('3'),
232a299,380
> # Create AArch64 unpacked view of the FP registers
> 'AA64FpOp1P0': floatReg('((op1 * 4) + 0)'),
> 'AA64FpOp1P1': floatReg('((op1 * 4) + 1)'),
> 'AA64FpOp1P2': floatReg('((op1 * 4) + 2)'),
> 'AA64FpOp1P3': floatReg('((op1 * 4) + 3)'),
> 'AA64FpOp2P0': floatReg('((op2 * 4) + 0)'),
> 'AA64FpOp2P1': floatReg('((op2 * 4) + 1)'),
> 'AA64FpOp2P2': floatReg('((op2 * 4) + 2)'),
> 'AA64FpOp2P3': floatReg('((op2 * 4) + 3)'),
> 'AA64FpOp3P0': floatReg('((op3 * 4) + 0)'),
> 'AA64FpOp3P1': floatReg('((op3 * 4) + 1)'),
> 'AA64FpOp3P2': floatReg('((op3 * 4) + 2)'),
> 'AA64FpOp3P3': floatReg('((op3 * 4) + 3)'),
> 'AA64FpDestP0': floatReg('((dest * 4) + 0)'),
> 'AA64FpDestP1': floatReg('((dest * 4) + 1)'),
> 'AA64FpDestP2': floatReg('((dest * 4) + 2)'),
> 'AA64FpDestP3': floatReg('((dest * 4) + 3)'),
> 'AA64FpDest2P0': floatReg('((dest2 * 4) + 0)'),
> 'AA64FpDest2P1': floatReg('((dest2 * 4) + 1)'),
> 'AA64FpDest2P2': floatReg('((dest2 * 4) + 2)'),
> 'AA64FpDest2P3': floatReg('((dest2 * 4) + 3)'),
>
> 'AA64FpOp1P0V0': floatReg('((((op1+0)) * 4) + 0)'),
> 'AA64FpOp1P1V0': floatReg('((((op1+0)) * 4) + 1)'),
> 'AA64FpOp1P2V0': floatReg('((((op1+0)) * 4) + 2)'),
> 'AA64FpOp1P3V0': floatReg('((((op1+0)) * 4) + 3)'),
>
> 'AA64FpOp1P0V1': floatReg('((((op1+1)) * 4) + 0)'),
> 'AA64FpOp1P1V1': floatReg('((((op1+1)) * 4) + 1)'),
> 'AA64FpOp1P2V1': floatReg('((((op1+1)) * 4) + 2)'),
> 'AA64FpOp1P3V1': floatReg('((((op1+1)) * 4) + 3)'),
>
> 'AA64FpOp1P0V2': floatReg('((((op1+2)) * 4) + 0)'),
> 'AA64FpOp1P1V2': floatReg('((((op1+2)) * 4) + 1)'),
> 'AA64FpOp1P2V2': floatReg('((((op1+2)) * 4) + 2)'),
> 'AA64FpOp1P3V2': floatReg('((((op1+2)) * 4) + 3)'),
>
> 'AA64FpOp1P0V3': floatReg('((((op1+3)) * 4) + 0)'),
> 'AA64FpOp1P1V3': floatReg('((((op1+3)) * 4) + 1)'),
> 'AA64FpOp1P2V3': floatReg('((((op1+3)) * 4) + 2)'),
> 'AA64FpOp1P3V3': floatReg('((((op1+3)) * 4) + 3)'),
>
> 'AA64FpOp1P0V0S': floatReg('((((op1+0)%32) * 4) + 0)'),
> 'AA64FpOp1P1V0S': floatReg('((((op1+0)%32) * 4) + 1)'),
> 'AA64FpOp1P2V0S': floatReg('((((op1+0)%32) * 4) + 2)'),
> 'AA64FpOp1P3V0S': floatReg('((((op1+0)%32) * 4) + 3)'),
>
> 'AA64FpOp1P0V1S': floatReg('((((op1+1)%32) * 4) + 0)'),
> 'AA64FpOp1P1V1S': floatReg('((((op1+1)%32) * 4) + 1)'),
> 'AA64FpOp1P2V1S': floatReg('((((op1+1)%32) * 4) + 2)'),
> 'AA64FpOp1P3V1S': floatReg('((((op1+1)%32) * 4) + 3)'),
>
> 'AA64FpOp1P0V2S': floatReg('((((op1+2)%32) * 4) + 0)'),
> 'AA64FpOp1P1V2S': floatReg('((((op1+2)%32) * 4) + 1)'),
> 'AA64FpOp1P2V2S': floatReg('((((op1+2)%32) * 4) + 2)'),
> 'AA64FpOp1P3V2S': floatReg('((((op1+2)%32) * 4) + 3)'),
>
> 'AA64FpOp1P0V3S': floatReg('((((op1+3)%32) * 4) + 0)'),
> 'AA64FpOp1P1V3S': floatReg('((((op1+3)%32) * 4) + 1)'),
> 'AA64FpOp1P2V3S': floatReg('((((op1+3)%32) * 4) + 2)'),
> 'AA64FpOp1P3V3S': floatReg('((((op1+3)%32) * 4) + 3)'),
>
> 'AA64FpDestP0V0': floatReg('((((dest+0)) * 4) + 0)'),
> 'AA64FpDestP1V0': floatReg('((((dest+0)) * 4) + 1)'),
> 'AA64FpDestP2V0': floatReg('((((dest+0)) * 4) + 2)'),
> 'AA64FpDestP3V0': floatReg('((((dest+0)) * 4) + 3)'),
>
> 'AA64FpDestP0V1': floatReg('((((dest+1)) * 4) + 0)'),
> 'AA64FpDestP1V1': floatReg('((((dest+1)) * 4) + 1)'),
> 'AA64FpDestP2V1': floatReg('((((dest+1)) * 4) + 2)'),
> 'AA64FpDestP3V1': floatReg('((((dest+1)) * 4) + 3)'),
>
> 'AA64FpDestP0V0L': floatReg('((((dest+0)%32) * 4) + 0)'),
> 'AA64FpDestP1V0L': floatReg('((((dest+0)%32) * 4) + 1)'),
> 'AA64FpDestP2V0L': floatReg('((((dest+0)%32) * 4) + 2)'),
> 'AA64FpDestP3V0L': floatReg('((((dest+0)%32) * 4) + 3)'),
>
> 'AA64FpDestP0V1L': floatReg('((((dest+1)%32) * 4) + 0)'),
> 'AA64FpDestP1V1L': floatReg('((((dest+1)%32) * 4) + 1)'),
> 'AA64FpDestP2V1L': floatReg('((((dest+1)%32) * 4) + 2)'),
> 'AA64FpDestP3V1L': floatReg('((((dest+1)%32) * 4) + 3)'),
>
235a384,387
> 'MiscNsBankedDest': cntrlNsBankedReg('dest'),
> 'MiscNsBankedOp1': cntrlNsBankedReg('op1'),
> 'MiscNsBankedDest64': cntrlNsBankedReg64('dest'),
> 'MiscNsBankedOp164': cntrlNsBankedReg64('op1'),
246a399
> 'Cpacr64': cntrlReg('MISCREG_CPACR_EL1'),
247a401,411
> 'Nsacr': cntrlReg('MISCREG_NSACR'),
> 'ElrHyp': cntrlRegNC('MISCREG_ELR_HYP'),
> 'Hcr': cntrlReg('MISCREG_HCR'),
> 'Hcr64': cntrlReg('MISCREG_HCR_EL2'),
> 'Hdcr': cntrlReg('MISCREG_HDCR'),
> 'Hcptr': cntrlReg('MISCREG_HCPTR'),
> 'CptrEl264': cntrlReg('MISCREG_CPTR_EL2'),
> 'CptrEl364': cntrlReg('MISCREG_CPTR_EL3'),
> 'Hstr': cntrlReg('MISCREG_HSTR'),
> 'Scr': cntrlReg('MISCREG_SCR'),
> 'Scr64': cntrlReg('MISCREG_SCR_EL3'),
250a415
> 'Dczid' : cntrlRegNC('MISCREG_DCZID_EL0'),
253a419,420
> 'XURa' : intRegX64('ura'),
> 'WURa' : intRegW64('ura'),
255a423
> 'FaP1' : floatReg('ura + 1'),
256a425
> 'XURb' : intRegX64('urb'),
257a427
> 'XURc' : intRegX64('urc'),
262a433
> 'RawPC': pcStateReg('pc', srtPC),