Skip to content

Instantly share code, notes, and snippets.

@davisp
Created March 21, 2022 20:40
Show Gist options
  • Save davisp/b74c517e3479fd6c3701c95b7dc5745c to your computer and use it in GitHub Desktop.
Save davisp/b74c517e3479fd6c3701c95b7dc5745c to your computer and use it in GitHub Desktop.
--- func-no-opt.S 2022-03-21 15:42:16.000000000 -0500
+++ func-opt.S 2022-03-21 15:42:34.000000000 -0500
@@ -14,68 +14,60 @@
{label,2}.
{test,is_tuple,{f,6},[{x,1}]}.
{test,test_arity,{f,6},[{x,1},4]}.
- {get_tuple_element,{x,1},0,{x,4}}.
- {get_tuple_element,{x,1},1,{x,5}}.
- {get_tuple_element,{x,1},2,{x,6}}.
- {get_tuple_element,{x,1},3,{x,1}}.
{line,[{location,"func.erl",8}]}.
- {gc_bif,'+',{f,0},7,[{x,2},{integer,1}],{x,2}}.
- {allocate,6,7}.
- {init_yregs,{list,[{y,0},{y,1},{y,2}]}}.
- {move,{x,5},{y,3}}.
- {move,{x,6},{y,4}}.
- {move,{x,1},{y,5}}.
- {move,{x,0},{x,1}}.
- {move,{x,2},{x,0}}.
- {move,{x,3},{x,2}}.
- {move,{x,4},{x,3}}.
+ {gc_bif,'+',{f,0},4,[{x,2},{integer,1}],{x,2}}.
+ {allocate,3,4}.
+ {init_yregs,{list,[{y,0},{y,1}]}}.
+ {move,{x,1},{y,2}}.
+ {get_tuple_element,{x,1},0,{x,1}}.
+ {swap,{x,3},{x,2}}.
+ {swap,{x,1},{x,3}}.
+ {swap,{x,0},{x,1}}.
{call_ext,4,{extfunc,couch_key_tree,stem_tree,4}}.
+ {move,{x,0},{y,1}}.
{test,is_tuple,{f,5},[{x,0}]}.
- {select_tuple_arity,{x,0},{f,5},{list,[3,{f,4},4,{f,3}]}}.
+ {get_tuple_element,{y,2},1,{x,0}}.
+ {get_tuple_element,{y,2},2,{y,0}}.
+ {get_tuple_element,{y,2},3,{y,2}}.
+ {select_tuple_arity,{y,1},{f,5},{list,[3,{f,4},4,{f,3}]}}.
{label,3}.
- {get_tuple_element,{x,0},0,{y,2}}.
- {get_tuple_element,{x,0},1,{x,1}}.
- {get_tuple_element,{x,0},2,{y,1}}.
- {get_tuple_element,{x,0},3,{y,0}}.
- {move,{x,1},{x,0}}.
- {move,{y,3},{x,1}}.
- {init_yregs,{list,[{y,3}]}}.
+ {get_tuple_element,{y,1},1,{x,1}}.
+ {swap,{x,0},{x,1}}.
{call_ext,2,{extfunc,erlang,max,2}}.
{test_heap,2,1}.
- {put_list,{y,1},{y,4},{y,4}}.
- {move,{y,0},{x,2}}.
- {move,{y,5},{x,1}}.
- {move,{x,0},{y,5}}.
- {trim,2,4}.
- {move,{x,2},{x,0}}.
+ {get_tuple_element,{y,1},2,{x,1}}.
+ {put_list,{x,1},{y,0},{y,0}}.
+ {get_tuple_element,{y,1},3,{x,1}}.
+ {move,{y,2},{x,2}}.
+ {move,{x,0},{y,2}}.
+ {move,{x,1},{x,0}}.
+ {move,{x,2},{x,1}}.
{line,[{location,"func.erl",12}]}.
{call_ext,2,{extfunc,erlang,'++',2}}.
{test_heap,5,1}.
- {put_tuple2,{x,0},{list,[{y,0},{y,3},{y,2},{x,0}]}}.
- {deallocate,4}.
+ {get_tuple_element,{y,1},0,{x,1}}.
+ {put_tuple2,{x,0},{list,[{x,1},{y,2},{y,0},{x,0}]}}.
+ {deallocate,3}.
return.
{label,4}.
- {get_tuple_element,{x,0},0,{y,2}}.
- {get_tuple_element,{x,0},1,{x,1}}.
- {get_tuple_element,{x,0},2,{y,1}}.
- {move,{x,1},{x,0}}.
- {move,{y,3},{x,1}}.
- {init_yregs,{list,[{y,3}]}}.
+ {get_tuple_element,{y,1},1,{x,1}}.
+ {swap,{x,0},{x,1}}.
{call_ext,2,{extfunc,erlang,max,2}}.
- {move,{y,1},{x,2}}.
- {move,{y,5},{x,1}}.
- {move,{x,0},{y,5}}.
- {trim,2,4}.
- {move,{x,2},{x,0}}.
+ {get_tuple_element,{y,1},2,{x,1}}.
+ {move,{y,2},{x,2}}.
+ {move,{x,0},{y,2}}.
+ {move,{x,1},{x,0}}.
+ {move,{x,2},{x,1}}.
{line,[{location,"func.erl",16}]}.
{call_ext,2,{extfunc,erlang,'++',2}}.
{test_heap,5,1}.
- {put_tuple2,{x,0},{list,[{y,0},{y,3},{y,2},{x,0}]}}.
- {deallocate,4}.
+ {get_tuple_element,{y,1},0,{x,1}}.
+ {put_tuple2,{x,0},{list,[{x,1},{y,2},{y,0},{x,0}]}}.
+ {deallocate,3}.
return.
{label,5}.
{line,[{location,"func.erl",8}]}.
- {case_end,{x,0}}.
+ {case_end,{y,1}}.
{label,6}.
{line,[{location,"func.erl",7}]}.
{badmatch,{x,1}}.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment