| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749 |
- // Copyright (C) 2012 Zeex
- //
- // Permission is hereby granted, free of charge, to any person obtaining a
- // copy of this software and associated documentation files (the "Software"),
- // to deal in the Software without restriction, including without limitation
- // the rights to use, copy, modify, merge, publish, distribute, sublicense,
- // and/or sell copies of the Software, and to permit persons to whom the
- // Software is furnished to do so, subject to the following conditions:
- //
- // The above copyright notice and this permission notice shall be included in
- // all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- // DEALINGS IN THE SOFTWARE.
- #if defined ASM_MACROS_INC
- #endinput
- #endif
- #define ASM_MACROS_INC
- // Only detect ONE space, so you don't need a trailing space on opcodes with no
- // parameters. Add a space on the end here incase there wasn't one already.
- #define @emit%0\32;%1\10;%3 (asm_emit_haslabel:asm_emit_notlabel:asm_emit_(ctx,%1));
- // Detect labels (for jump targets).
- #define asm_emit_haslabel:asm_emit_notlabel:asm_emit_(ctx,%1:) AsmEmitLabelStringize AsmEmitLabel:(ctx,%1)
- #define asm_emit_notlabel:asm_emit_(ctx,%1) asm_emit_(ctx,%1 )
- // Detect jumps to labels, instead of the labels themselves.
- #define AsmEmitLabelStringize%0:(ctx,%1\32;%2) asm_emit_%1Label(ctx,%2)
- #define AsmEmitLabel:(ctx,%2) (ctx,#%2)
- // NOW detect the second space and use it to extract the opcode name.
- #define asm_emit_(ctx,%1\32;%2) asm_emit_%1(ctx,%2)
- // Finally, detect zero parameters.
- #define ctx,) ctx)
- // All lower case.
- #define asm_emit_add AsmEmitAdd
- #define asm_emit_add_c AsmEmitAddC
- #define asm_emit_addr_alt AsmEmitAddrAlt
- #define asm_emit_addr_pri AsmEmitAddrPri
- #define asm_emit_align_alt AsmEmitAlignAlt
- #define asm_emit_align_pri AsmEmitAlignPri
- #define asm_emit_and AsmEmitAnd
- #define asm_emit_bounds AsmEmitBounds
- #define asm_emit_break AsmEmitBreak
- #define asm_emit_call AsmEmitCall
- #define asm_emit_cmps AsmEmitCmps
- #define asm_emit_const_alt AsmEmitConstAlt
- #define asm_emit_const_pri AsmEmitConstPri
- #define asm_emit_dec AsmEmitDec
- #define asm_emit_dec_alt AsmEmitDecAlt
- #define asm_emit_dec_i AsmEmitDecI
- #define asm_emit_dec_pri AsmEmitDecPri
- #define asm_emit_dec_s AsmEmitDecS
- #define asm_emit_eq AsmEmitEq
- #define asm_emit_eq_c_alt AsmEmitEqCAlt
- #define asm_emit_eq_c_pri AsmEmitEqCPri
- #define asm_emit_fill AsmEmitFill
- #define asm_emit_geq AsmEmitGeq
- #define asm_emit_grtr AsmEmitGrtr
- #define asm_emit_halt AsmEmitHalt
- #define asm_emit_heap AsmEmitHeap
- #define asm_emit_idxaddr AsmEmitIdxaddr
- #define asm_emit_idxaddr_b AsmEmitIdxaddrB
- #define asm_emit_inc AsmEmitInc
- #define asm_emit_inc_alt AsmEmitIncAlt
- #define asm_emit_inc_i AsmEmitIncI
- #define asm_emit_inc_pri AsmEmitIncPri
- #define asm_emit_inc_s AsmEmitIncS
- #define asm_emit_invert AsmEmitInvert
- #define asm_emit_jeq AsmEmitJeq
- #define asm_emit_jeq_rel AsmEmitJeqRel
- #define asm_emit_jgeq AsmEmitJgeq
- #define asm_emit_jgeq_rel AsmEmitJgeqRel
- #define asm_emit_jgrtr AsmEmitJgrtr
- #define asm_emit_jgrtr_rel AsmEmitJgrtrRel
- #define asm_emit_jleq AsmEmitJleq
- #define asm_emit_jleq_rel AsmEmitJleqRel
- #define asm_emit_jless AsmEmitJless
- #define asm_emit_jless_rel AsmEmitJlessRel
- #define asm_emit_jneq AsmEmitJneq
- #define asm_emit_jneq_rel AsmEmitJneqRel
- #define asm_emit_jnz AsmEmitJnz
- #define asm_emit_jnz_rel AsmEmitJnzRel
- #define asm_emit_jsgeq AsmEmitJsgeq
- #define asm_emit_jsgeq_rel AsmEmitJsgeqRel
- #define asm_emit_jsgrtr AsmEmitJsgrtr
- #define asm_emit_jsgrtr_rel AsmEmitJsgrtrRel
- #define asm_emit_jsleq AsmEmitJsleq
- #define asm_emit_jsleq_rel AsmEmitJsleqRel
- #define asm_emit_jsless AsmEmitJsless
- #define asm_emit_jsless_rel AsmEmitJslessRel
- #define asm_emit_jump AsmEmitJump
- #define asm_emit_jump_rel AsmEmitJumpRel
- #define asm_emit_jzer AsmEmitJzer
- #define asm_emit_jzer_rel AsmEmitJzerRel
- #define asm_emit_lctrl AsmEmitLctrl
- #define asm_emit_leq AsmEmitLeq
- #define asm_emit_less AsmEmitLess
- #define asm_emit_lidx AsmEmitLidx
- #define asm_emit_lidx_b AsmEmitLidxB
- #define asm_emit_load_alt AsmEmitLoadAlt
- #define asm_emit_load_i AsmEmitLoadI
- #define asm_emit_load_pri AsmEmitLoadPri
- #define asm_emit_load_s_alt AsmEmitLoadSAlt
- #define asm_emit_load_s_pri AsmEmitLoadSPri
- #define asm_emit_lodb_i AsmEmitLodbI
- #define asm_emit_lref_alt AsmEmitLrefAlt
- #define asm_emit_lref_pri AsmEmitLrefPri
- #define asm_emit_lref_s_alt AsmEmitLrefSAlt
- #define asm_emit_lref_s_pri AsmEmitLrefSPri
- #define asm_emit_move_alt AsmEmitMoveAlt
- #define asm_emit_move_pri AsmEmitMovePri
- #define asm_emit_movs AsmEmitMovs
- #define asm_emit_neg AsmEmitNeg
- #define asm_emit_neq AsmEmitNeq
- #define asm_emit_nop AsmEmitNop
- #define asm_emit_not AsmEmitNot
- #define asm_emit_or AsmEmitOr
- #define asm_emit_pop_alt AsmEmitPopAlt
- #define asm_emit_pop_pri AsmEmitPopPri
- #define asm_emit_proc AsmEmitProc
- #define asm_emit_push AsmEmitPush
- #define asm_emit_push_adr AsmEmitPushAdr
- #define asm_emit_push_alt AsmEmitPushAlt
- #define asm_emit_push_c AsmEmitPushC
- #define asm_emit_push_pri AsmEmitPushPri
- #define asm_emit_push_s AsmEmitPushS
- #define asm_emit_ret AsmEmitRet
- #define asm_emit_retn AsmEmitRetn
- #define asm_emit_sctrl AsmEmitSctrl
- #define asm_emit_sdiv AsmEmitSdiv
- #define asm_emit_sdiv_alt AsmEmitSdivAlt
- #define asm_emit_sgeq AsmEmitSgeq
- #define asm_emit_sgrtr AsmEmitSgrtr
- #define asm_emit_shl AsmEmitShl
- #define asm_emit_shl_c_alt AsmEmitShlCAlt
- #define asm_emit_shl_c_pri AsmEmitShlCPri
- #define asm_emit_shr AsmEmitShr
- #define asm_emit_shr_c_alt AsmEmitShrCAlt
- #define asm_emit_shr_c_pri AsmEmitShrCPri
- #define asm_emit_sign_alt AsmEmitSignAlt
- #define asm_emit_sign_pri AsmEmitSignPri
- #define asm_emit_sleq AsmEmitSleq
- #define asm_emit_sless AsmEmitSless
- #define asm_emit_smul AsmEmitSmul
- #define asm_emit_smul_c AsmEmitSmulC
- #define asm_emit_sref_alt AsmEmitSrefAlt
- #define asm_emit_sref_pri AsmEmitSrefPri
- #define asm_emit_sref_s_alt AsmEmitSrefSAlt
- #define asm_emit_sref_s_pri AsmEmitSrefSPri
- #define asm_emit_sshr AsmEmitSshr
- #define asm_emit_stack AsmEmitStack
- #define asm_emit_stor_alt AsmEmitStorAlt
- #define asm_emit_stor_i AsmEmitStorI
- #define asm_emit_stor_pri AsmEmitStorPri
- #define asm_emit_stor_s_alt AsmEmitStorSAlt
- #define asm_emit_stor_s_pri AsmEmitStorSPri
- #define asm_emit_strb_i AsmEmitStrbI
- #define asm_emit_sub AsmEmitSub
- #define asm_emit_sub_alt AsmEmitSubAlt
- #define asm_emit_swap_alt AsmEmitSwapAlt
- #define asm_emit_swap_pri AsmEmitSwapPri
- #define asm_emit_sysreq_c AsmEmitSysreqC
- #define asm_emit_sysreq_d AsmEmitSysreqD
- #define asm_emit_udiv AsmEmitUdiv
- #define asm_emit_udiv_alt AsmEmitUdivAlt
- #define asm_emit_umul AsmEmitUmul
- #define asm_emit_xchg AsmEmitXchg
- #define asm_emit_xor AsmEmitXor
- #define asm_emit_zero AsmEmitZero
- #define asm_emit_zero_alt AsmEmitZeroAlt
- #define asm_emit_zero_pri AsmEmitZeroPri
- #define asm_emit_zero_s AsmEmitZeroS
- // Custom.
- #define asm_emit_sysreq AsmEmitSysreq
- #define asm_emit_pop_args AsmEmitPopArgs
- #define asm_emit_push_arg AsmEmitPushArg
- #define asm_emit_push_num_args AsmEmitPushNumArgs
- // All UPPER case.
- #define asm_emit_ADD AsmEmitAdd
- #define asm_emit_AND AsmEmitAnd
- #define asm_emit_BOUNDS AsmEmitBounds
- #define asm_emit_BREAK AsmEmitBreak
- #define asm_emit_CALL AsmEmitCall
- #define asm_emit_CMPS AsmEmitCmps
- #define asm_emit_DEC AsmEmitDec
- #define asm_emit_EQ AsmEmitEq
- #define asm_emit_FILL AsmEmitFill
- #define asm_emit_GEQ AsmEmitGeq
- #define asm_emit_GRTR AsmEmitGrtr
- #define asm_emit_HALT AsmEmitHalt
- #define asm_emit_HEAP AsmEmitHeap
- #define asm_emit_IDXADDR AsmEmitIdxaddr
- #define asm_emit_INC AsmEmitInc
- #define asm_emit_INVERT AsmEmitInvert
- #define asm_emit_JEQ AsmEmitJeq
- #define asm_emit_JGEQ AsmEmitJgeq
- #define asm_emit_JGRTR AsmEmitJgrtr
- #define asm_emit_JLEQ AsmEmitJleq
- #define asm_emit_JLESS AsmEmitJless
- #define asm_emit_JNEQ AsmEmitJneq
- #define asm_emit_JNZ AsmEmitJnz
- #define asm_emit_JSGEQ AsmEmitJsgeq
- #define asm_emit_JSGRTR AsmEmitJsgrtr
- #define asm_emit_JSLEQ AsmEmitJsleq
- #define asm_emit_JSLESS AsmEmitJsless
- #define asm_emit_JUMP AsmEmitJump
- #define asm_emit_JZER AsmEmitJzer
- #define asm_emit_LCTRL AsmEmitLctrl
- #define asm_emit_LEQ AsmEmitLeq
- #define asm_emit_LESS AsmEmitLess
- #define asm_emit_LIDX AsmEmitLidx
- #define asm_emit_MOVS AsmEmitMovs
- #define asm_emit_NEG AsmEmitNeg
- #define asm_emit_NEQ AsmEmitNeq
- #define asm_emit_NOP AsmEmitNop
- #define asm_emit_NOT AsmEmitNot
- #define asm_emit_OR AsmEmitOr
- #define asm_emit_PROC AsmEmitProc
- #define asm_emit_PUSH AsmEmitPush
- #define asm_emit_RET AsmEmitRet
- #define asm_emit_RETN AsmEmitRetn
- #define asm_emit_SCTRL AsmEmitSctrl
- #define asm_emit_SDIV AsmEmitSdiv
- #define asm_emit_SGEQ AsmEmitSgeq
- #define asm_emit_SGRTR AsmEmitSgrtr
- #define asm_emit_SHL AsmEmitShl
- #define asm_emit_SHR AsmEmitShr
- #define asm_emit_SLEQ AsmEmitSleq
- #define asm_emit_SLESS AsmEmitSless
- #define asm_emit_SMUL AsmEmitSmul
- #define asm_emit_SSHR AsmEmitSshr
- #define asm_emit_STACK AsmEmitStack
- #define asm_emit_SUB AsmEmitSub
- #define asm_emit_UDIV AsmEmitUdiv
- #define asm_emit_UMUL AsmEmitUmul
- #define asm_emit_XCHG AsmEmitXchg
- #define asm_emit_XOR AsmEmitXor
- #define asm_emit_ZERO AsmEmitZero
- #define asm_emit_SYSREQ AsmEmitSysreq
- // All mixed case.
- #define asm_emit_Add AsmEmitAdd
- #define asm_emit_And AsmEmitAnd
- #define asm_emit_Bounds AsmEmitBounds
- #define asm_emit_Break AsmEmitBreak
- #define asm_emit_Call AsmEmitCall
- #define asm_emit_Cmps AsmEmitCmps
- #define asm_emit_Dec AsmEmitDec
- #define asm_emit_Eq AsmEmitEq
- #define asm_emit_Fill AsmEmitFill
- #define asm_emit_Geq AsmEmitGeq
- #define asm_emit_Grtr AsmEmitGrtr
- #define asm_emit_Halt AsmEmitHalt
- #define asm_emit_Heap AsmEmitHeap
- #define asm_emit_Idxaddr AsmEmitIdxaddr
- #define asm_emit_Inc AsmEmitInc
- #define asm_emit_Invert AsmEmitInvert
- #define asm_emit_Jeq AsmEmitJeq
- #define asm_emit_Jgeq AsmEmitJgeq
- #define asm_emit_Jgrtr AsmEmitJgrtr
- #define asm_emit_Jleq AsmEmitJleq
- #define asm_emit_Jless AsmEmitJless
- #define asm_emit_Jneq AsmEmitJneq
- #define asm_emit_Jnz AsmEmitJnz
- #define asm_emit_Jsgeq AsmEmitJsgeq
- #define asm_emit_Jsgrtr AsmEmitJsgrtr
- #define asm_emit_Jsleq AsmEmitJsleq
- #define asm_emit_Jsless AsmEmitJsless
- #define asm_emit_Jump AsmEmitJump
- #define asm_emit_Jzer AsmEmitJzer
- #define asm_emit_Lctrl AsmEmitLctrl
- #define asm_emit_Leq AsmEmitLeq
- #define asm_emit_Less AsmEmitLess
- #define asm_emit_Lidx AsmEmitLidx
- #define asm_emit_Movs AsmEmitMovs
- #define asm_emit_Neg AsmEmitNeg
- #define asm_emit_Neq AsmEmitNeq
- #define asm_emit_Nop AsmEmitNop
- #define asm_emit_Not AsmEmitNot
- #define asm_emit_Or AsmEmitOr
- #define asm_emit_Proc AsmEmitProc
- #define asm_emit_Push AsmEmitPush
- #define asm_emit_Ret AsmEmitRet
- #define asm_emit_Retn AsmEmitRetn
- #define asm_emit_Sctrl AsmEmitSctrl
- #define asm_emit_Sdiv AsmEmitSdiv
- #define asm_emit_Sgeq AsmEmitSgeq
- #define asm_emit_Sgrtr AsmEmitSgrtr
- #define asm_emit_Shl AsmEmitShl
- #define asm_emit_Shr AsmEmitShr
- #define asm_emit_Sleq AsmEmitSleq
- #define asm_emit_Sless AsmEmitSless
- #define asm_emit_Smul AsmEmitSmul
- #define asm_emit_Sshr AsmEmitSshr
- #define asm_emit_Stack AsmEmitStack
- #define asm_emit_Sub AsmEmitSub
- #define asm_emit_Udiv AsmEmitUdiv
- #define asm_emit_Umul AsmEmitUmul
- #define asm_emit_Xchg AsmEmitXchg
- #define asm_emit_Xor AsmEmitXor
- #define asm_emit_Zero AsmEmitZero
- #define asm_emit_Sysreq AsmEmitSysreq
- // Now detect all the "." variants.
- #define AsmEmitAdd.%0(%1) AsmEmitAdd%0(%1)
- #define AsmEmitAddc AsmEmitAddC
- #define AsmEmitAddr.%0(%1) AsmEmitAddr%0(%1)
- #define AsmEmitAddrpri AsmEmitAddrPri
- #define AsmEmitAddrPRI AsmEmitAddrPri
- #define AsmEmitAddralt AsmEmitAddrAlt
- #define AsmEmitAddrALT AsmEmitAddrAlt
- #define AsmEmitAlign.%0(%1) AsmEmitAlign%0(%1)
- #define AsmEmitAlignpri AsmEmitAlignPri
- #define AsmEmitAlignPRI AsmEmitAlignPri
- #define AsmEmitAlignalt AsmEmitAlignaAlt
- #define AsmEmitAlignALT AsmEmitAlignaAlt
- #define AsmEmitCall.%0(%1) AsmEmitCall%0(%1)
- #define AsmEmitCallabs AsmEmitCallAbs
- #define AsmEmitConst.%0(%1) AsmEmitConst%0(%1)
- #define AsmEmitConstpri AsmEmitConstPri
- #define AsmEmitConstPRI AsmEmitConstPri
- #define AsmEmitConstalt AsmEmitConstAlt
- #define AsmEmitConstALT AsmEmitConstAlt
- #define AsmEmitDec.%0(%1) AsmEmitDec%0(%1)
- #define AsmEmitDecpri AsmEmitDecPri
- #define AsmEmitDecPRI AsmEmitDecPri
- #define AsmEmitDecalt AsmEmitDecAlt
- #define AsmEmitDecALT AsmEmitDecAlt
- #define AsmEmitDeci AsmEmitDecI
- #define AsmEmitDecs AsmEmitDecS
- #define AsmEmitEq.%0(%1) AsmEmitEq%0(%1)
- #define AsmEmitEqc AsmEmitEqC
- #define AsmEmitEqC.%0(%1) AsmEmitEqC%0(%1)
- #define AsmEmitEqCpri AsmEmitEqCPri
- #define AsmEmitEqCPRI AsmEmitEqCPri
- #define AsmEmitEqCalt AsmEmitEqCAlt
- #define AsmEmitEqCALT AsmEmitEqCAlt
- #define AsmEmitIdxaddr.%0(%1) AsmEmitIdxaddr%0(%1)
- #define AsmEmitIdxaddrb AsmEmitIdxaddrB
- #define AsmEmitInc.%0(%1) AsmEmitInc%0(%1)
- #define AsmEmitIncpri AsmEmitIncPri
- #define AsmEmitIncPRI AsmEmitIncPri
- #define AsmEmitIncalt AsmEmitIncAlt
- #define AsmEmitIncALT AsmEmitIncAlt
- #define AsmEmitInci AsmEmitIncI
- #define AsmEmitIncs AsmEmitIncS
- #define AsmEmitJeq.%0(%1) AsmEmitJeq%0(%1)
- #define AsmEmitJgeq.%0(%1) AsmEmitJgeq%0(%1)
- #define AsmEmitJgrtr.%0(%1) AsmEmitJgrtr%0(%1)
- #define AsmEmitJleq.%0(%1) AsmEmitJleq%0(%1)
- #define AsmEmitJless.%0(%1) AsmEmitJless%0(%1)
- #define AsmEmitJneq.%0(%1) AsmEmitJneq%0(%1)
- #define AsmEmitJnz.%0(%1) AsmEmitJnz%0(%1)
- #define AsmEmitJsgeq.%0(%1) AsmEmitJsgeq%0(%1)
- #define AsmEmitJsgrtr.%0(%1) AsmEmitJsgrtr%0(%1)
- #define AsmEmitJsleq.%0(%1) AsmEmitJsleq%0(%1)
- #define AsmEmitJsless.%0(%1) AsmEmitJsless%0(%1)
- #define AsmEmitJump.%0(%1) AsmEmitJump%0(%1)
- #define AsmEmitJzer.%0(%1) AsmEmitJzer%0(%1)
- #define AsmEmitJeqrel AsmEmitJeqRel
- #define AsmEmitJgeqrel AsmEmitJgeqRel
- #define AsmEmitJgrtrrel AsmEmitJgrtrRel
- #define AsmEmitJleqrel AsmEmitJleqRel
- #define AsmEmitJlessrel AsmEmitJlessRel
- #define AsmEmitJneqrel AsmEmitJneqRel
- #define AsmEmitJnzrel AsmEmitJnzRel
- #define AsmEmitJsgeqrel AsmEmitJsgeqRel
- #define AsmEmitJsgrtrrel AsmEmitJsgrtrRel
- #define AsmEmitJsleqrel AsmEmitJsleqRel
- #define AsmEmitJslessrel AsmEmitJslessRel
- #define AsmEmitJumprel AsmEmitJumpRel
- #define AsmEmitJzerrel AsmEmitJzerRel
- #define AsmEmitJeqREL AsmEmitJeqRel
- #define AsmEmitJgeqREL AsmEmitJgeqRel
- #define AsmEmitJgrtrREL AsmEmitJgrtrRel
- #define AsmEmitJleqREL AsmEmitJleqRel
- #define AsmEmitJlessREL AsmEmitJlessRel
- #define AsmEmitJneqREL AsmEmitJneqRel
- #define AsmEmitJnzREL AsmEmitJnzRel
- #define AsmEmitJsgeqREL AsmEmitJsgeqRel
- #define AsmEmitJsgrtrREL AsmEmitJsgrtrRel
- #define AsmEmitJsleqREL AsmEmitJsleqRel
- #define AsmEmitJslessREL AsmEmitJslessRel
- #define AsmEmitJumpREL AsmEmitJumpRel
- #define AsmEmitJzerREL AsmEmitJzerRel
- #define AsmEmitLidx.%0(%1) AsmEmitLidx%0(%1)
- #define AsmEmitLidxb AsmEmitLidxB
- #define AsmEmitLoad.%0(%1) AsmEmitLoad%0(%1)
- #define AsmEmitLoadpri AsmEmitLoadPri
- #define AsmEmitLoadPRI AsmEmitLoadPri
- #define AsmEmitLoadalt AsmEmitLoadAlt
- #define AsmEmitLoadALT AsmEmitLoadAlt
- #define AsmEmitLoads AsmEmitLoadS
- #define AsmEmitLoadS.%0(%1) AsmEmitLoadS%0(%1)
- #define AsmEmitLoadSpri AsmEmitLoadSPri
- #define AsmEmitLoadSPRI AsmEmitLoadSPri
- #define AsmEmitLoadSalt AsmEmitLoadSAlt
- #define AsmEmitLoadSALT AsmEmitLoadSAlt
- #define AsmEmitLodb.%0(%1) AsmEmitLodb%0(%1)
- #define AsmEmitLodbi AsmEmitLodbI
- #define AsmEmitLoadi AsmEmitLoadI
- #define AsmEmitLref.%0(%1) AsmEmitLref%0(%1)
- #define AsmEmitLrefpri AsmEmitLrefPri
- #define AsmEmitLrefPRI AsmEmitLrefPri
- #define AsmEmitLrefalt AsmEmitLrefAlt
- #define AsmEmitLrefALT AsmEmitLrefAlt
- #define AsmEmitLrefs AsmEmitLrefS
- #define AsmEmitLrefS.%0(%1) AsmEmitLrefS%0(%1)
- #define AsmEmitLrefSpri AsmEmitLrefSPri
- #define AsmEmitLrefSPRI AsmEmitLrefSPri
- #define AsmEmitLrefSalt AsmEmitLrefSAlt
- #define AsmEmitLrefSALT AsmEmitLrefSAlt
- #define AsmEmitMove.%0(%1) AsmEmitMove%0(%1)
- #define AsmEmitMovepri AsmEmitMovePri
- #define AsmEmitMovePRI AsmEmitMovePri
- #define AsmEmitMovealt AsmEmitMoveAlt
- #define AsmEmitMoveALT AsmEmitMoveAlt
- #define AsmEmitPop.%0(%1) AsmEmitPop%0(%1)
- #define AsmEmitPoppri AsmEmitPopPri
- #define AsmEmitPopPRI AsmEmitPopPri
- #define AsmEmitPopalt AsmEmitPopAlt
- #define AsmEmitPopALT AsmEmitPopAlt
- #define AsmEmitPush.%0(%1) AsmEmitPush%0(%1)
- #define AsmEmitPushpri AsmEmitPushPri
- #define AsmEmitPushPRI AsmEmitPushPri
- #define AsmEmitPushalt AsmEmitPushAlt
- #define AsmEmitPushALT AsmEmitPushAlt
- #define AsmEmitPushadr AsmEmitPushAdr
- #define AsmEmitPushADR AsmEmitPushAdr
- #define AsmEmitPushc AsmEmitPushC
- #define AsmEmitPushs AsmEmitPushS
- #define AsmEmitSdiv.%0(%1) AsmEmitSdiv%0(%1)
- #define AsmEmitSdivalt AsmEmitSdivAlt
- #define AsmEmitSdivALT AsmEmitSdivAlt
- #define AsmEmitShl.%0(%1) AsmEmitShl%0(%1)
- #define AsmEmitShlc AsmEmitShlC
- #define AsmEmitShlC.%0(%1) AsmEmitShlC%0(%1)
- #define AsmEmitShlCpri AsmEmitShlCPri
- #define AsmEmitShlCPRI AsmEmitShlCPri
- #define AsmEmitShlCalt AsmEmitShlCAlt
- #define AsmEmitShlCALT AsmEmitShlCAlt
- #define AsmEmitShr.%0(%1) AsmEmitShr%0(%1)
- #define AsmEmitShrc AsmEmitShrC
- #define AsmEmitShrC.%0(%1) AsmEmitShrC%0(%1)
- #define AsmEmitShrCpri AsmEmitShrCPri
- #define AsmEmitShrCPRI AsmEmitShrCPri
- #define AsmEmitShrCalt AsmEmitShrCAlt
- #define AsmEmitShrCALT AsmEmitShrCAlt
- #define AsmEmitSign.%0(%1) AsmEmitSign%0(%1)
- #define AsmEmitSignpri AsmEmitSignPri
- #define AsmEmitSignPRI AsmEmitSignPri
- #define AsmEmitSignalt AsmEmitSignAlt
- #define AsmEmitSignALT AsmEmitSignAlt
- #define AsmEmitSmul.%0(%1) AsmEmitSmul%0(%1)
- #define AsmEmitSmulc AsmEmitSmulC
- #define AsmEmitSref.%0(%1) AsmEmitSref%0(%1)
- #define AsmEmitSrefpri AsmEmitSrefPri
- #define AsmEmitSrefPRI AsmEmitSrefPri
- #define AsmEmitSrefalt AsmEmitSrefAlt
- #define AsmEmitSrefALT AsmEmitSrefAlt
- #define AsmEmitSrefs AsmEmitSrefS
- #define AsmEmitSrefS.%0(%1) AsmEmitSrefS%0(%1)
- #define AsmEmitSrefSpri AsmEmitSrefSPri
- #define AsmEmitSrefSPRI AsmEmitSrefSPri
- #define AsmEmitSrefSalt AsmEmitSrefSAlt
- #define AsmEmitSrefSALT AsmEmitSrefSAlt
- #define AsmEmitStor.%0(%1) AsmEmitStor%0(%1)
- #define AsmEmitStorpri AsmEmitStorPri
- #define AsmEmitStorPRI AsmEmitStorPri
- #define AsmEmitStoralt AsmEmitStorAlt
- #define AsmEmitStorALT AsmEmitStorAlt
- #define AsmEmitStori AsmEmitStorI
- #define AsmEmitStors AsmEmitStorS
- #define AsmEmitStorS.%0(%1) AsmEmitStorS%0(%1)
- #define AsmEmitStorSpri AsmEmitStorSPri
- #define AsmEmitStorSPRI AsmEmitStorSPri
- #define AsmEmitStorSalt AsmEmitStorSAlt
- #define AsmEmitStorSALT AsmEmitStorSAlt
- #define AsmEmitStrb.%0(%1) AsmEmitStrb%0(%1)
- #define AsmEmitStrbi AsmEmitStrbI
- #define AsmEmitSub.%0(%1) AsmEmitSub%0(%1)
- #define AsmEmitSubalt AsmEmitSubAlt
- #define AsmEmitSubALT AsmEmitSubAlt
- #define AsmEmitSwap.%0(%1) AsmEmitSwap%0(%1)
- #define AsmEmitSwappri AsmEmitSwapPri
- #define AsmEmitSwapPRI AsmEmitSwapPri
- #define AsmEmitSwapalt AsmEmitSwapAlt
- #define AsmEmitSwapALT AsmEmitSwapAlt
- #define AsmEmitSysreq.%0(%1) AsmEmitSysreq%0(%1)
- #define AsmEmitSysreqc AsmEmitSysreqC
- #define AsmEmitSysreqd AsmEmitSysreqD
- #define AsmEmitUdiv.%0(%1) AsmEmitUdiv%0(%1)
- #define AsmEmitUdivalt AsmEmitUdivAlt
- #define AsmEmitUdivALT AsmEmitUdivAlt
- #define AsmEmitZero.%0(%1) AsmEmitZero%0(%1)
- #define AsmEmitZeropri AsmEmitZeroPri
- #define AsmEmitZeroPRI AsmEmitZeroPri
- #define AsmEmitZeroalt AsmEmitZeroAlt
- #define AsmEmitZeroALT AsmEmitZeroAlt
- #define AsmEmitZeros AsmEmitZeroS
- // Custom.
- #define AsmEmitPopargs AsmEmitPopArgs
- #define AsmEmitPopARGS AsmEmitPopArgs
- #define AsmEmitPusharg AsmEmitPushArg
- #define AsmEmitPushARG AsmEmitPushArg
- #define AsmEmitPushnum AsmEmitPushNum
- #define AsmEmitPushNUM AsmEmitPushNum
- #define AsmEmitPushNum.%0(%1) AsmEmitPushNum%0(%1)
- #define AsmEmitPushNumargs AsmEmitPushNumArgs
- #define AsmEmitPushNumARGS AsmEmitPushNumArgs
- // Certain OpCodes don't exist, but are the start of others - detect them here.
- // Lower-case.
- #define asm_emit_addr AsmEmitAddr
- #define asm_emit_align AsmEmitAlign
- #define asm_emit_const AsmEmitConst
- #define asm_emit_load AsmEmitLoad
- #define asm_emit_lodb AsmEmitLodb
- #define asm_emit_lref AsmEmitLref
- #define asm_emit_move AsmEmitMove
- #define asm_emit_pop AsmEmitPop
- #define asm_emit_sign AsmEmitSign
- #define asm_emit_stor AsmEmitStor
- #define asm_emit_sref AsmEmitSref
- #define asm_emit_strb AsmEmitStrb
- #define asm_emit_swap AsmEmitSwap
- // Mixed-case.
- #define asm_emit_Addr AsmEmitAddr
- #define asm_emit_Align AsmEmitAlign
- #define asm_emit_Const AsmEmitConst
- #define asm_emit_Load AsmEmitLoad
- #define asm_emit_Lodb AsmEmitLodb
- #define asm_emit_Lref AsmEmitLref
- #define asm_emit_Move AsmEmitMove
- #define asm_emit_Pop AsmEmitPop
- #define asm_emit_Sign AsmEmitSign
- #define asm_emit_Stor AsmEmitStor
- #define asm_emit_Sref AsmEmitSref
- #define asm_emit_Strb AsmEmitStrb
- #define asm_emit_Swap AsmEmitSwap
- // Upper-case.
- #define asm_emit_ADDR AsmEmitAddr
- #define asm_emit_ALIGN AsmEmitAlign
- #define asm_emit_CONST AsmEmitConst
- #define asm_emit_LOAD AsmEmitLoad
- #define asm_emit_LODB AsmEmitLodb
- #define asm_emit_LREF AsmEmitLref
- #define asm_emit_MOVE AsmEmitMove
- #define asm_emit_POP AsmEmitPop
- #define asm_emit_SIGN AsmEmitSign
- #define asm_emit_STOR AsmEmitStor
- #define asm_emit_SREF AsmEmitSref
- #define asm_emit_STRB AsmEmitStrb
- #define asm_emit_SWAP AsmEmitSwap
- // Jumps to labels.
- #define asm_emit_jeqLabel AsmEmitJeqLabel
- #define asm_emit_jeq_labelLabel AsmEmitJeqLabel
- #define asm_emit_jgeqLabel AsmEmitJgeqLabel
- #define asm_emit_jgeq_labelLabel AsmEmitJgeqLabel
- #define asm_emit_jgrtrLabel AsmEmitJgrtrLabel
- #define asm_emit_jgrtr_labelLabel AsmEmitJgrtrLabel
- #define asm_emit_jleqLabel AsmEmitJleqLabel
- #define asm_emit_jleq_labelLabel AsmEmitJleqLabel
- #define asm_emit_jlessLabel AsmEmitJlessLabel
- #define asm_emit_jless_labelLabel AsmEmitJlessLabel
- #define asm_emit_jneqLabel AsmEmitJneqLabel
- #define asm_emit_jneq_labelLabel AsmEmitJneqLabel
- #define asm_emit_jnzLabel AsmEmitJnzLabel
- #define asm_emit_jnz_labelLabel AsmEmitJnzLabel
- #define asm_emit_jsgeqLabel AsmEmitJsgeqLabel
- #define asm_emit_jsgeq_labelLabel AsmEmitJsgeqLabel
- #define asm_emit_jsgrtrLabel AsmEmitJsgrtrLabel
- #define asm_emit_jsgrtr_labelLabel AsmEmitJsgrtrLabel
- #define asm_emit_jsleqLabel AsmEmitJsleqLabel
- #define asm_emit_jsleq_labelLabel AsmEmitJsleqLabel
- #define asm_emit_jslessLabel AsmEmitJslessLabel
- #define asm_emit_jsless_labelLabel AsmEmitJslessLabel
- #define asm_emit_jumpLabel AsmEmitJumpLabel
- #define asm_emit_jump_labelLabel AsmEmitJumpLabel
- #define asm_emit_jzerLabel AsmEmitJzerLabel
- #define asm_emit_jzer_labelLabel AsmEmitJzerLabel
- #define asm_emit_jeq_label AsmEmitJeqLabel
- #define asm_emit_jgeq_label AsmEmitJgeqLabel
- #define asm_emit_jgrtr_label AsmEmitJgrtrLabel
- #define asm_emit_jleq_label AsmEmitJleqLabel
- #define asm_emit_jless_label AsmEmitJlessLabel
- #define asm_emit_jneq_label AsmEmitJneqLabel
- #define asm_emit_jnz_label AsmEmitJnzLabel
- #define asm_emit_jsgeq_label AsmEmitJsgeqLabel
- #define asm_emit_jsgrtr_label AsmEmitJsgrtrLabel
- #define asm_emit_jsleq_label AsmEmitJsleqLabel
- #define asm_emit_jsless_label AsmEmitJslessLabel
- #define asm_emit_jump_label AsmEmitJumpLabel
- #define asm_emit_jzer_label AsmEmitJzerLabel
- #define asm_emit_JEQLabel AsmEmitJeqLabel
- #define asm_emit_JGEQLabel AsmEmitJgeqLabel
- #define asm_emit_JGRTRLabel AsmEmitJgrtrLabel
- #define asm_emit_JLEQLabel AsmEmitJleqLabel
- #define asm_emit_JLESSLabel AsmEmitJlessLabel
- #define asm_emit_JNEQLabel AsmEmitJneqLabel
- #define asm_emit_JNZLabel AsmEmitJnzLabel
- #define asm_emit_JSGEQLabel AsmEmitJsgeqLabel
- #define asm_emit_JSGRTRLabel AsmEmitJsgrtrLabel
- #define asm_emit_JSLEQLabel AsmEmitJsleqLabel
- #define asm_emit_JSLESSLabel AsmEmitJslessLabel
- #define asm_emit_JUMPLabel AsmEmitJumpLabel
- #define asm_emit_JZERLabel AsmEmitJzerLabel
- #define asm_emit_JeqLabel AsmEmitJeqLabel
- #define asm_emit_JgeqLabel AsmEmitJgeqLabel
- #define asm_emit_JgrtrLabel AsmEmitJgrtrLabel
- #define asm_emit_JleqLabel AsmEmitJleqLabel
- #define asm_emit_JlessLabel AsmEmitJlessLabel
- #define asm_emit_JneqLabel AsmEmitJneqLabel
- #define asm_emit_JnzLabel AsmEmitJnzLabel
- #define asm_emit_JsgeqLabel AsmEmitJsgeqLabel
- #define asm_emit_JsgrtrLabel AsmEmitJsgrtrLabel
- #define asm_emit_JsleqLabel AsmEmitJsleqLabel
- #define asm_emit_JslessLabel AsmEmitJslessLabel
- #define asm_emit_JumpLabel AsmEmitJumpLabel
- #define asm_emit_JzerLabel AsmEmitJzerLabel
- // Only used when they explicitly typed `@emit JUMP.label x`
- #define AsmEmitJeqlabel AsmEmitJeqLabel
- #define AsmEmitJgeqlabel AsmEmitJgeqLabel
- #define AsmEmitJgrtrlabel AsmEmitJgrtrLabel
- #define AsmEmitJleqlabel AsmEmitJleqLabel
- #define AsmEmitJlesslabel AsmEmitJlessLabel
- #define AsmEmitJneqlabel AsmEmitJneqLabel
- #define AsmEmitJnzlabel AsmEmitJnzLabel
- #define AsmEmitJsgeqlabel AsmEmitJsgeqLabel
- #define AsmEmitJsgrtrlabel AsmEmitJsgrtrLabel
- #define AsmEmitJsleqlabel AsmEmitJsleqLabel
- #define AsmEmitJslesslabel AsmEmitJslessLabel
- #define AsmEmitJumplabel AsmEmitJumpLabel
- #define AsmEmitJzerlabel AsmEmitJzerLabel
- #define AsmEmitJeqLABEL AsmEmitJeqLabel
- #define AsmEmitJgeqLABEL AsmEmitJgeqLabel
- #define AsmEmitJgrtrLABEL AsmEmitJgrtrLabel
- #define AsmEmitJleqLABEL AsmEmitJleqLabel
- #define AsmEmitJlessLABEL AsmEmitJlessLabel
- #define AsmEmitJneqLABEL AsmEmitJneqLabel
- #define AsmEmitJnzLABEL AsmEmitJnzLabel
- #define AsmEmitJsgeqLABEL AsmEmitJsgeqLabel
- #define AsmEmitJsgrtrLABEL AsmEmitJsgrtrLabel
- #define AsmEmitJsleqLABEL AsmEmitJsleqLabel
- #define AsmEmitJslessLABEL AsmEmitJslessLabel
- #define AsmEmitJumpLABEL AsmEmitJumpLabel
- #define AsmEmitJzerLABEL AsmEmitJzerLabel
- // This is required as otherwise:
- //
- // @emit Jump.Label x
- //
- // Would not generate the `#x` required, while all other versions would.
- #define AsmEmitJeqLabel(ctx,%2) AsmEmitJeqLabelStringize(ctx,#%2)
- #define AsmEmitJgeqLabel(ctx,%2) AsmEmitJgeqLabelStringize(ctx,#%2)
- #define AsmEmitJgrtrLabel(ctx,%2) AsmEmitJgrtrLabelStringize(ctx,#%2)
- #define AsmEmitJleqLabel(ctx,%2) AsmEmitJleqLabelStringize(ctx,#%2)
- #define AsmEmitJlessLabel(ctx,%2) AsmEmitJlessLabelStringize(ctx,#%2)
- #define AsmEmitJneqLabel(ctx,%2) AsmEmitJneqLabelStringize(ctx,#%2)
- #define AsmEmitJnzLabel(ctx,%2) AsmEmitJnzLabelStringize(ctx,#%2)
- #define AsmEmitJsgeqLabel(ctx,%2) AsmEmitJsgeqLabelStringize(ctx,#%2)
- #define AsmEmitJsgrtrLabel(ctx,%2) AsmEmitJsgrtrLabelStringize(ctx,#%2)
- #define AsmEmitJsleqLabel(ctx,%2) AsmEmitJsleqLabelStringize(ctx,#%2)
- #define AsmEmitJslessLabel(ctx,%2) AsmEmitJslessLabelStringize(ctx,#%2)
- #define AsmEmitJumpLabel(ctx,%2) AsmEmitJumpLabelStringize(ctx,#%2)
- #define AsmEmitJzerLabel(ctx,%2) AsmEmitJzerLabelStringize(ctx,#%2)
- // Only used when they explicitly typed `@emit JUMP.label x:`
- #define AsmEmitJeqlabelLabel AsmEmitJeqLabel
- #define AsmEmitJgeqlabelLabel AsmEmitJgeqLabel
- #define AsmEmitJgrtrlabelLabel AsmEmitJgrtrLabel
- #define AsmEmitJleqlabelLabel AsmEmitJleqLabel
- #define AsmEmitJlesslabelLabel AsmEmitJlessLabel
- #define AsmEmitJneqlabelLabel AsmEmitJneqLabel
- #define AsmEmitJnzlabelLabel AsmEmitJnzLabel
- #define AsmEmitJsgeqlabelLabel AsmEmitJsgeqLabel
- #define AsmEmitJsgrtrlabelLabel AsmEmitJsgrtrLabel
- #define AsmEmitJsleqlabelLabel AsmEmitJsleqLabel
- #define AsmEmitJslesslabelLabel AsmEmitJslessLabel
- #define AsmEmitJumplabelLabel AsmEmitJumpLabel
- #define AsmEmitJzerlabelLabel AsmEmitJzerLabel
- #define AsmEmitJeqLABELLabel AsmEmitJeqLabel
- #define AsmEmitJgeqLABELLabel AsmEmitJgeqLabel
- #define AsmEmitJgrtrLABELLabel AsmEmitJgrtrLabel
- #define AsmEmitJleqLABELLabel AsmEmitJleqLabel
- #define AsmEmitJlessLABELLabel AsmEmitJlessLabel
- #define AsmEmitJneqLABELLabel AsmEmitJneqLabel
- #define AsmEmitJnzLABELLabel AsmEmitJnzLabel
- #define AsmEmitJsgeqLABELLabel AsmEmitJsgeqLabel
- #define AsmEmitJsgrtrLABELLabel AsmEmitJsgrtrLabel
- #define AsmEmitJsleqLABELLabel AsmEmitJsleqLabel
- #define AsmEmitJslessLABELLabel AsmEmitJslessLabel
- #define AsmEmitJumpLABELLabel AsmEmitJumpLabel
- #define AsmEmitJzerLABELLabel AsmEmitJzerLabel
- #define AsmEmitJeqLabelLabel AsmEmitJeqLabel
- #define AsmEmitJgeqLabelLabel AsmEmitJgeqLabel
- #define AsmEmitJgrtrLabelLabel AsmEmitJgrtrLabel
- #define AsmEmitJleqLabelLabel AsmEmitJleqLabel
- #define AsmEmitJlessLabelLabel AsmEmitJlessLabel
- #define AsmEmitJneqLabelLabel AsmEmitJneqLabel
- #define AsmEmitJnzLabelLabel AsmEmitJnzLabel
- #define AsmEmitJsgeqLabelLabel AsmEmitJsgeqLabel
- #define AsmEmitJsgrtrLabelLabel AsmEmitJsgrtrLabel
- #define AsmEmitJsleqLabelLabel AsmEmitJsleqLabel
- #define AsmEmitJslessLabelLabel AsmEmitJslessLabel
- #define AsmEmitJumpLabelLabel AsmEmitJumpLabel
- #define AsmEmitJzerLabelLabel AsmEmitJzerLabel
- // CallLabel macros.
- #define asm_emit_callLabel AsmEmitCallLabel
- #define asm_emit_call_labelLabel AsmEmitCallLabel
- #define asm_emit_call_label AsmEmitCallLabel
- #define asm_emit_CALLLabel AsmEmitCallLabel
- #define asm_emit_CallLabel AsmEmitCallLabel
- #define AsmEmitCalllabel AsmEmitCallLabel
- #define AsmEmitCallLABEL AsmEmitCallLabel
- #define AsmEmitCalllabelLabel AsmEmitCallLabel
- #define AsmEmitCallLABELLabel AsmEmitCallLabel
- #define AsmEmitCallLabelLabel AsmEmitCallLabel
- #define AsmEmitCallLabel(ctx,%2) AsmEmitCallLabelStringize(ctx,#%2)
- // Explicit `@emit Label name`
- #define asm_emit_labelLabel(ctx,%2) AsmEmitLabelStringize(ctx,#%2)
- #define asm_emit_LABELLabel(ctx,%2) AsmEmitLabelStringize(ctx,#%2)
- #define asm_emit_LabelLabel(ctx,%2) AsmEmitLabelStringize(ctx,#%2)
- #define asm_emit_label(ctx,%2) AsmEmitLabelStringize(ctx,#%2)
- #define asm_emit_LABEL(ctx,%2) AsmEmitLabelStringize(ctx,#%2)
- #define asm_emit_Label(ctx,%2) AsmEmitLabelStringize(ctx,#%2)
|