📄 ops.tab
字号:
#move S=c r | call_ext Ar=u Func=u$is_not_bif => i_move_call_ext S r Funcmove S=c r | call_ext_last Ar=u Func=u$is_not_bif D => i_move_call_ext_last Func D S rmove S=c r | call_ext_only Ar=u Func=u$is_not_bif => i_move_call_ext_only Func S r call_ext Ar=u Func => i_call_ext Funccall_ext_last Ar=u Func D => i_call_ext_last Func Dcall_ext_only Ar=u Func => i_call_ext_only Funci_applyi_apply_last Pi_apply_onlyi_apply_funi_apply_fun_last Pi_apply_fun_onlyi_hibernatecall_bif0 ecall_bif1 ecall_bif2 ecall_bif3 e## Calls to non-building and guard BIFs.#bif0 u$bif:erlang:self/0 Dst=d => self Dstbif0 u$bif:erlang:node/0 Dst=d => node Dstbif1 Fail Bif=u$bif:erlang:get/1 Src=s Dst=d => i_get Src Dstbif2 Jump=j u$bif:erlang:element/2 S1=ow S2=ow Dst=d => badarg Jumpbif2 Jump=j u$bif:erlang:element/2 S1=ow S2=s Dst=d => badarg Jumpbif2 Jump=j u$bif:erlang:element/2 S1=s S2=ow Dst=d => badarg Jumpbif2 Jump=j u$bif:erlang:element/2 S1=s S2=s Dst=d => gen_element(Jump, S1, S2, Dst)bif1 Fail Bif S1=o Dst => i_put_float S1 x | bif1 Fail Bif x Dstbif1 Fail Bif S1=w Dst => i_put_big S1 x | bif1 Fail Bif x Dstbif1 p Bif S1 Dst => bif1_body Bif S1 Dstbif2 p Bif S1 S2 Dst => i_fetch S1 S2 | i_bif2_body Bif Dstbif2 Fail=f Bif S1 S2 Dst => i_fetch S1 S2 | i_bif2 Fail Bif Dsti_get s d%macro: self Selfself rself xself y%macro: node Nodenode rnode x%coldnode y%hoti_fast_element j I s di_element j s s dbif1 f b s dbif1_body b s di_bif2 f b di_bif2_body b d## Internal calls.#move S=c r | call Ar P=f => i_move_call S r Pmove S=s r | call Ar P=f => move_call S r Pi_move_call c r f%macro:move_call MoveCall -arg_f -size -nonextmove_call/3move_call x r fmove_call y r fmove S=c r | call_last Ar P=f D => i_move_call_last P D S rmove S r | call_last Ar P=f D => move_call_last S r P Di_move_call_last f P c r%macro:move_call_last MoveCallLast -arg_f -nonextmove_call_last/4move_call_last x r f Pmove_call_last y r f Pmove S=c r | call_only Ar P=f => i_move_call_only P S rmove S=x r | call_only Ar P=f => move_call_only S r Pi_move_call_only f c r%macro:move_call_only MoveCallOnly -arg_f -nonextmove_call_only/3move_call_only x r fcall Ar Func => i_call Funccall_last Ar Func D => i_call_last Func Dcall_only Ar Func => i_call_only Funci_call fi_call_last f Pi_call_only fi_call_ext ei_call_ext_last e Pi_call_ext_only ei_move_call_ext c r ei_move_call_ext_last e P c ri_move_call_ext_only e c r# Fun calls.call_fun Arity=u | deallocate D | return => i_call_fun_last Arity Dcall_fun Arity=u => i_call_fun Arityi_call_fun Ii_call_fun_last I Pmake_fun2 OldIndex=u => gen_make_fun2(OldIndex)%macro: i_make_fun MakeFun -pack%coldi_make_fun I t%hot%macro: is_function IsFunction -fail_actionis_function f xis_function f yis_function f ris_function Fail=f cwo => jump Failfunc_info M=a a==am_module_info A=u==0 | label L | move n r => gen_func_info_mi(M, A, L)func_info M=a a==am_module_info A=u==1 | label L | move n r => gen_func_info_mi(M, A, L)func_info M=a F=a A=u | label L => gen_func_info(M, F, A, L)# ================================================================# New bit syntax matching (R11B).# ================================================================%cold%macro: bs_start_match2 BsStartMatch2 -fail_action -gen_destbs_start_match2 f r I I dbs_start_match2 f x I I dbs_start_match2 f y I I dbs_start_match2 Fail=f icwoa X Y D => jump Failbs_save2 r Ibs_save2 x Ibs_restore2 r Ibs_restore2 x I# Fetching integers from binaries.bs_get_integer2 Fail=f Ms=rx Live=u Sz=s Unit=u Flags=u Dst=d => \ gen_get_integer2(Fail, Ms, Live, Sz, Unit, Flags, Dst)bs_get_integer2 Fail=f Ms=rx Live=u Sz=w Unit=u Flags=u Dst=d => \ gen_get_integer2(Fail, Ms, Live, Sz, Unit, Flags, Dst)%macro: i_bs_get_integer_imm2 BsGetIntegerImm2 -fail_action -gen_dest%macro: i_bs_get_integer2 BsGetInteger2 -fail_action -gen_dest%macro: i_bs_get_integer2_8 BsGetInteger2_8 -fail_action -gen_dest%macro: i_bs_get_integer2_16 BsGetInteger2_16 -fail_action -gen_desti_bs_get_integer_imm2 f r I I I di_bs_get_integer_imm2 f x I I I di_bs_get_integer2 f r I s I di_bs_get_integer2 f x I s I di_bs_get_integer2_8 f r di_bs_get_integer2_8 f x di_bs_get_integer2_16 f r di_bs_get_integer2_16 f x d# Fetching binaries from binaries.bs_get_binary2 Fail=f Ms=rx Live=u Sz=s Unit=u Flags=u Dst=d => \ gen_get_binary2(Fail, Ms, Live, Sz, Unit, Flags, Dst)bs_get_binary2 Fail=f Ms=rx Live=u Sz=w Unit=u Flags=u Dst=d => \ gen_get_binary2(Fail, Ms, Live, Sz, Unit, Flags, Dst)%macro: i_bs_get_binary_imm2 BsGetBinaryImm_2 -fail_action -gen_dest%macro: i_bs_get_binary2 BsGetBinary_2 -fail_action -gen_dest%macro: i_bs_get_binary_all2 BsGetBinaryAll_2 -fail_action -gen_desti_bs_get_binary_imm2 f r I I I di_bs_get_binary_imm2 f x I I I di_bs_get_binary2 f r I s I di_bs_get_binary2 f x I s I di_bs_get_binary_all2 f r I I di_bs_get_binary_all2 f x I I d# Fetching float from binaries.bs_get_float2 Fail=f Ms=rx Live=u Sz=s Unit=u Flags=u Dst=d => \ gen_get_float2(Fail, Ms, Live, Sz, Unit, Flags, Dst)bs_get_float2 Fail=f Ms=rx Live=u Sz=w Unit=u Flags=u Dst=d => jump Fail%macro: i_bs_get_float2 BsGetFloat2 -fail_action -gen_desti_bs_get_float2 f r I s I di_bs_get_float2 f x I s I d# Miscellanousbs_skip_bits2 Fail=f Ms=rx Sz=s Unit=u Flags=u => \ gen_skip_bits2(Fail, Ms, Sz, Unit, Flags)bs_skip_bits2 Fail=f Ms=rx Sz=w Unit=u Flags=u => \ gen_skip_bits2(Fail, Ms, Sz, Unit, Flags)%macro: i_bs_skip_bits_imm2 BsSkipBitsImm2 -fail_actioni_bs_skip_bits_imm2 f r Ii_bs_skip_bits_imm2 f x I%macro: i_bs_skip_bits2 BsSkipBits2 -fail_actioni_bs_skip_bits2 f r x Ii_bs_skip_bits2 f r r Ii_bs_skip_bits2 f r y Ii_bs_skip_bits2 f x x Ii_bs_skip_bits2 f x r Ii_bs_skip_bits2 f x y I%macro: i_bs_skip_bits_all2 BsSkipBitsAll2 -fail_actioni_bs_skip_bits_all2 f r Ii_bs_skip_bits_all2 f x I bs_test_tail2 Fail=f Ms=rx Bits=u==0 => bs_test_zero_tail2 Fail Msbs_test_tail2 Fail=f Ms=rx Bits=u => bs_test_tail_imm2 Fail Ms Bitsbs_test_zero_tail2 f rbs_test_zero_tail2 f xbs_test_tail_imm2 f r Ibs_test_tail_imm2 f x I%hot## Constructing binaries#%coldbs_init2 Fail Sz Words Regs Flags Dst | binary_too_big(Sz) => system_limit Failbs_init2 Fail Sz=u Words=u==0 Regs Flags Dst | should_gen_heap_bin(Sz) | new_bs_instructions() => i_bs_init_heap_bin Sz Regs Dstbs_init2 Fail Sz=u Words=u==0 Regs Flags Dst | new_bs_instructions() => i_bs_init Sz Regs Dstbs_init2 Fail Sz=u Words Regs Flags Dst | should_gen_heap_bin(Sz) | new_bs_instructions() => i_bs_init_heap_bin_heap Sz Words Regs Dstbs_init2 Fail Sz=u Words Regs Flags Dst | new_bs_instructions() => \ i_bs_init_heap Sz Words Regs Dstbs_init2 Fail Sz Words=u==0 Regs Flags Dst | new_bs_instructions() => \ i_bs_init_fail Sz Fail Regs Dstbs_init2 Fail Sz Words Regs Flags Dst | new_bs_instructions() => \ i_fetch Sz r | i_bs_init_fail_heap Words Fail Regs Dsti_bs_init_fail r j I di_bs_init_fail x j I di_bs_init_fail y j I di_bs_init_fail_heap I j I di_bs_init I I di_bs_init_heap_bin I I di_bs_init_heap I I I di_bs_init_heap_bin_heap I I I dbs_bits_to_bytes Fail Src Dst => i_bs_bits_to_bytes Src Fail Dsti_bs_bits_to_bytes r j di_bs_bits_to_bytes x j di_bs_bits_to_bytes y j dbs_bits_to_bytes2 Src Dst => i_bs_bits_to_bytes2 Src Dsti_bs_bits_to_bytes2 r di_bs_bits_to_bytes2 x di_bs_bits_to_bytes2 y dbs_final2 Src Dst => i_bs_final2 Src Dsti_bs_final2 r di_bs_final2 x di_bs_final2 y dbs_add Fail S1=i==0 S2 Unit=u==1 D => move S2 Dbs_add Fail S1 S2 Unit D => i_fetch S1 S2 | i_bs_add Fail Unit Di_bs_add j I d## Storing integers into binaries.#bs_put_integer Fail=j Sz=s Unit=u Flags=u Big=w => \ i_put_big Big x | bs_put_integer Fail Sz Unit Flags xbs_put_integer Fail=j Sz=s Unit=u Flags=u Bad=o => badarg Failbs_put_integer Fail=j Sz=s Unit=u Flags=u Src=s => \ gen_put_integer(Fail, Sz, Unit, Flags, Src)bs_put_integer Fail=j Sz=w Unit=u Flags=u Src=s => \ gen_put_integer(Fail, Sz, Unit, Flags, Src)%macro: i_new_bs_put_integer NewBsPutInteger%macro: i_new_bs_put_integer_imm NewBsPutIntegerImmi_new_bs_put_integer j s I si_new_bs_put_integer_imm j I I s## Storing floats into binaries.#bs_put_float Fail Sz=w Unit Flags Val => badarg Failbs_put_float Fail=j Sz Unit=u Flags=u Big=w => \ i_put_big Big x | bs_put_float Fail Sz Unit Flags xbs_put_float Fail=j Sz Unit=u Flags=u Float=o => \ i_put_float Float x | bs_put_float Fail Sz Unit Flags xbs_put_float Fail=j Sz=s Unit=u Flags=u Src=s => \ gen_put_float(Fail, Sz, Unit, Flags, Src)%macro: i_new_bs_put_float NewBsPutFloat%macro: i_new_bs_put_float_imm NewBsPutFloatImmi_new_bs_put_float j s I si_new_bs_put_float_imm j I I s## Storing binaries into binaries.#bs_put_binary Fail=j Sz=s Unit=u Flags=u Bad=ow => badarg Failbs_put_binary Fail=j Sz=s Unit=u Flags=u Src=s => \ gen_put_binary(Fail, Sz, Unit, Flags, Src)bs_put_binary Fail=j Sz=w Unit=u Flags=u Src=s => \ gen_put_binary(Fail, Sz, Unit, Flags, Src)%macro: i_new_bs_put_binary NewBsPutBinaryi_new_bs_put_binary j s I s%macro: i_new_bs_put_binary_imm NewBsPutBinaryImmi_new_bs_put_binary_imm j I s%macro: i_new_bs_put_binary_all NewBsPutBinaryAlli_new_bs_put_binary_all j s## Warning: The i_bs_put_string and i_new_bs_put_string instructions# are specially treated in the loader.# Don't change the instruction format unless you change the loader too.#bs_put_string Len String | query_new_instructions() => i_new_bs_put_string Len Stringi_new_bs_put_string I I%hot## New floating point instructions (R8).#fadd p FR1 FR2 FR3 => i_fadd FR1 FR2 FR3fsub p FR1 FR2 FR3 => i_fsub FR1 FR2 FR3fmul p FR1 FR2 FR3 => i_fmul FR1 FR2 FR3fdiv p FR1 FR2 FR3 => i_fdiv FR1 FR2 FR3fnegate p FR1 FR2 => i_fnegate FR1 FR2fconv Int=i Dst=l => move Int x | fconv x Dstfconv Float=o Dst=l => i_put_float Float x | fmove x Dstfconv Big=w Dst=l => i_put_big Big x | fconv x Dstfmove o lfmove d lfconv d li_fadd l l li_fsub l l li_fmul l l li_fdiv l l li_fnegate l lfclearerror | no_fpe_signals() =>fcheckerror p | no_fpe_signals() =>fcheckerror p => i_fcheckerrori_fcheckerrorfclearerrorfmove FR=l Dst=d | new_float_allocation() => fmove_new FR Dst# The new instruction for moving a float out of a floating point register.# (No allocation.)fmove_new l d## New apply instructions in R10B.#apply Iapply_last I P## New instruction in R11B-4.#put_literal Lit=u Dest=d => gen_put_literal(Lit, Dest)i_put_literal/3i_put_literal I I d
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -