| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- //-------------------------------------------------------------------------------------------------------
- // Copyright (C) Microsoft. All rights reserved.
- // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
- //-------------------------------------------------------------------------------------------------------
- //------------------------------------------------------------------------------
- // ARMNT Unwind codes
- //
- // 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 B3 B4 Opsize Explanation
- //------------------------------------------------------------------------------
- // 0 x x x x x x x | | | | 16 | add sp, sp, #X*4
- UNWIND_CODE( ALLOC_7B, 16, 0x00000000, 0x80000000, 1 )
- // 1 0 L x x x x x | x x x x x x x x | | | 32 | pop {r0-r12, lr} (X=bitmask)
- UNWIND_CODE( POP_BITMASK, 32, 0x80000000, 0xc0000000, 2 )
- // 1 1 0 0 x x x x | | | | 16 | mov sp, rX (X=0-15)
- UNWIND_CODE( MOV_SP, 16, 0xc0000000, 0xf0000000, 1 )
- // 1 1 0 1 0 L x x | | | | 16 | pop {r4-rX, lr} (X=4-7)
- UNWIND_CODE( POP_RANGE, 16, 0xd0000000, 0xf8000000, 1 )
- // 1 1 0 1 1 L x x | | | | 32 | pop {r4-rX, lr} (X=8-11)
- UNWIND_CODE( POP_RANGE, 32, 0xd8000000, 0xf8000000, 1 )
- // 1 1 1 0 0 x x x | | | | 32 | vpop {d8-dX} (X=8-15)
- UNWIND_CODE( VPOP, 32, 0xe0000000, 0xf8000000, 1 )
- // 1 1 1 0 1 0 x x | x x x x x x x x | | | 32 | add sp, sp, #X*4
- UNWIND_CODE( ALLOC_10B, 32, 0xe8000000, 0xfc000000, 2 )
- // 1 1 1 0 1 1 0 L | x x x x x x x x | | | 16 | pop {r0-r7,lr} (X=bitmask)
- UNWIND_CODE( POP_BITMASK, 16, 0xec000000, 0xfe000000, 2 )
- // 1 1 1 0 1 1 1 0 | 0 0 0 0 x x x x | | | 16 | Microsoft-specific
- // reserved
- // 1 1 1 0 1 1 1 0 | x x x x y y y y | | | 16 | available (X = 1-15)
- // reserved
- // 1 1 1 0 1 1 1 1 | 0 0 0 0 x x x x | | | 32 | ldr lr, [sp], #X*4
- UNWIND_CODE( POP_LR, 32, 0xef000000, 0xfff00000, 2 )
- // 1 1 1 0 1 1 1 1 | x x x x y y y y | | | 32 | available (X = 1-15)
- // reserved
- // 1 1 1 1 0 x x x | | | | -- | available (X = 0-4)
- // reserved
- // 1 1 1 1 0 1 0 1 | s s s s e e e e | | | 32 | vpop {dS-dE}
- UNWIND_CODE( VPOP_RANGE, 32, 0xf5000000, 0xff000000, 2 )
- // 1 1 1 1 0 1 1 0 | s s s s e e e e | | | 32 | vpop {d(S+16)-d(E+16)}
- UNWIND_CODE( VPOP_HIRANGE, 32, 0xf6000000, 0xff000000, 2 )
- // 1 1 1 1 0 1 1 1 | x x x x x x x x | x | | 16 | add sp, sp, #X*4
- UNWIND_CODE( ALLOC_16B, 16, 0xf7000000, 0xff000000, 3 )
- // 1 1 1 1 1 0 0 0 | x x x x x x x x | x | x | 16 | add sp, sp, #X*4
- UNWIND_CODE( ALLOC_24B, 16, 0xf8000000, 0xff000000, 4 )
- // 1 1 1 1 1 0 0 1 | x x x x x x x x | x | | 32 | add sp, sp, #X*4
- UNWIND_CODE( ALLOC_16B, 32, 0xf9000000, 0xff000000, 3 )
- // 1 1 1 1 1 0 1 0 | x x x x x x x x | x | x | 32 | add sp, sp, #X*4
- UNWIND_CODE( ALLOC_24B, 32, 0xfa000000, 0xff000000, 4 )
- // 1 1 1 1 1 0 1 1 | | | | 16 | 16bit nop
- UNWIND_CODE( NOP, 16, 0xfb000000, 0xff000000, 1 )
- // 1 1 1 1 1 1 0 0 | | | | 32 | 32bit nop
- UNWIND_CODE( NOP, 32, 0xfc000000, 0xff000000, 1 )
- // 1 1 1 1 1 1 0 1 | | | | 16 | end + 16bit nop in epilogue
- UNWIND_CODE( END_EX, 16, 0xfd000000, 0xff000000, 1 )
- // 1 1 1 1 1 1 1 0 | | | | 32 | end + 32bit nop in epilogue
- UNWIND_CODE( END_EX, 32, 0xfe000000, 0xff000000, 1 )
- // 1 1 1 1 1 1 1 1 | | | | 00 | end
- UNWIND_CODE( END, 00, 0xff000000, 0xff000000, 1 )
- // this is the last template
- UNWIND_CODE( INVALID, 00, 0xbaadf00d, 0xffffffff, 0 )
|