( scratchpad ) : foo ( -- ) { 1 2 3 } [ 1 + ] map . ; ( scratchpad ) ( scratchpad ) \ foo optimized. [ 3 dup 0 dup >R "COMPLEX SHUFFLE" 0 "COMPLEX SHUFFLE" \ ( gensym ) [ pick pick fixnum< [ ( 5266786 5266790 5267231 -- 5266786 5267231 5266786 5266790 5267231 ) >R >R >R >R dup >R { 1 2 3 } >R R> swap 2 fixnum+fast slot 1 + R> R> >R R> swap 2 fixnum+fast set-slot R> R> R> "COMPLEX SHUFFLE" 1 fixnum+fast "COMPLEX SHUFFLE" ( gensym ) ] [ 3drop ] if ] label R> . ] ( scratchpad ) \ foo test-mr. === word: foo, label: foo _label 0 _prologue T{ stack-frame { total-size 64 } { spill-area-size 8 } { calls-vm? t } } _label 1 ##gc EAX ECX 32 { } { } f ##load-immediate EAX 48 ##load-immediate ECX 0 ##allot EDX 20 array EBP ##set-slot-imm EAX EDX 1 2 ##set-slot-imm ECX EDX 2 2 ##set-slot-imm ECX EDX 3 2 ##set-slot-imm ECX EDX 4 2 ##inc-d 3 ##inc-r 1 ##replace EDX R 0 _label 2 _spill EDX int-rep T{ spill-slot } _spill EAX int-rep T{ spill-slot { n 4 } } _branch 7 _label 3 _reload EDX int-rep T{ spill-slot } _label 4 ##load-reference EBP { 1 2 3 } ##add-imm EBX ECX 32 ##shr-imm EBX EBX 2 ##add-imm EBX EBX -2 ##slot EBP EBP EBX ##load-immediate EBX 16 ##inc-d -1 ##inc-r 5 ##replace ECX R 2 ##replace EBP D 1 ##replace EDX R 4 ##replace EBX D 0 ##replace ECX R 0 ##replace EDX R 1 ##replace EAX R 3 _label 5 ##call + _label 6 ##peek EDX R 4 _spill EDX int-rep T{ spill-slot } ##peek EBP D 0 ##peek EBX R 0 ##peek EDX R 1 ##peek ECX R 2 ##peek EAX R 3 _spill EAX int-rep T{ spill-slot { n 4 } } ##add-imm EBX EBX 32 ##shr-imm EBX EBX 2 ##add-imm EBX EBX -2 ##set-slot EBP EDX EBX ##write-barrier EDX EBX EAX EBP ##add-imm ECX ECX 16 ##inc-d 2 ##inc-r -5 _label 7 _reload EAX int-rep T{ spill-slot { n 4 } } _compare-branch 3 ECX EAX cc< _label 8 ##peek EAX R 0 ##inc-d -3 ##inc-d 1 ##inc-r -1 ##replace EAX D 0 _label 9 _epilogue T{ stack-frame { total-size 64 } { spill-area-size 8 } { calls-vm? t } } ##jump . _spill-area-size 8 ( scratchpad ) \ foo disassemble [Thread debugging using libthread_db enabled] [New Thread 0xb77ea6c0 (LWP 30093)] [New Thread 0xaef8fb90 (LWP 30094)] 0xb7b8536f in std::_Rb_tree_insert_and_rebalance () from /usr/lib/libstdc++.so.6 Dump of assembler code from 0xaf8b31b0 to 0xaf8b32f0: 0xaf8b31b0: push $0x40 0xaf8b31b5: push $0xaf8b31b0 0xaf8b31ba: sub $0x34,%esp 0xaf8b31bd: mov $0x809121c,%eax 0xaf8b31c2: mov (%eax),%ecx 0xaf8b31c4: add $0x20,%ecx 0xaf8b31c7: mov 0x8(%eax),%eax 0xaf8b31ca: cmp %eax,%ecx 0xaf8b31cc: jle 0xaf8b3201 0xaf8b31d2: mov $0x8091218,%eax 0xaf8b31d7: mov (%eax),%eax 0xaf8b31d9: lea -0x4(%esp),%ecx 0xaf8b31dd: mov %ecx,(%eax) 0xaf8b31df: mov %esi,0x8(%eax) 0xaf8b31e2: mov %edi,0xc(%eax) 0xaf8b31e5: lea 0x28(%esp),%eax 0xaf8b31e9: movl $0x8091218,0x8(%esp) 0xaf8b31f1: movl $0x0,0x4(%esp) 0xaf8b31f9: mov %eax,(%esp) 0xaf8b31fc: call 0x8077700 0xaf8b3201: mov $0x30,%eax 0xaf8b3206: xor %ecx,%ecx 0xaf8b3208: mov $0x809121c,%edx 0xaf8b320d: mov (%edx),%ebp 0xaf8b320f: movl $0x8,0x0(%ebp) 0xaf8b3216: or $0x2,%ebp 0xaf8b3219: addl $0x20,(%edx) 0xaf8b321c: mov %eax,0x2(%ebp) 0xaf8b321f: mov %ecx,0x6(%ebp) 0xaf8b3222: mov %ecx,0xa(%ebp) 0xaf8b3225: mov %ecx,0xe(%ebp) 0xaf8b3228: add $0xc,%esi 0xaf8b322b: add $0x4,%edi 0xaf8b322e: mov %ebp,(%edi) 0xaf8b3230: mov %ebp,0x20(%esp) 0xaf8b3234: mov %eax,0x24(%esp) 0xaf8b3238: jmp 0xaf8b32bb 0xaf8b323d: mov 0x20(%esp),%ebp 0xaf8b3241: mov $0xb523b4f2,%edx 0xaf8b3246: lea 0x20(%ecx),%ebx 0xaf8b3249: shr $0x2,%ebx 0xaf8b324c: add $0xfffffffe,%ebx 0xaf8b324f: mov (%edx,%ebx,1),%edx 0xaf8b3252: mov $0x10,%ebx 0xaf8b3257: sub $0x4,%esi 0xaf8b325a: add $0x14,%edi 0xaf8b325d: mov %ecx,-0x8(%edi) 0xaf8b3260: mov %edx,-0x4(%esi) 0xaf8b3263: mov %ebp,-0x10(%edi) 0xaf8b3266: mov %ebx,(%esi) 0xaf8b3268: mov %ecx,(%edi) 0xaf8b326a: mov %ebp,-0x4(%edi) 0xaf8b326d: mov %eax,-0xc(%edi) 0xaf8b3270: call 0xaf1fe480 0xaf8b3275: mov -0x10(%edi),%ebp 0xaf8b3278: mov %ebp,0x20(%esp) 0xaf8b327c: mov (%esi),%edx 0xaf8b327e: mov (%edi),%ebx 0xaf8b3280: mov -0x4(%edi),%ebp 0xaf8b3283: mov -0x8(%edi),%ecx 0xaf8b3286: mov -0xc(%edi),%eax 0xaf8b3289: mov %eax,0x24(%esp) 0xaf8b328d: add $0x20,%ebx 0xaf8b3290: shr $0x2,%ebx 0xaf8b3293: add $0xfffffffe,%ebx 0xaf8b3296: mov %edx,0x0(%ebp,%ebx,1) 0xaf8b329a: lea 0x0(%ebp,%ebx,1),%eax 0xaf8b329e: shr $0x8,%eax 0xaf8b32a1: movb $0xc0,-0x4f9127f8(%eax) 0xaf8b32a8: shr $0xa,%eax 0xaf8b32ab: movb $0xc0,0x808e9a6(%eax) 0xaf8b32b2: add $0x10,%ecx 0xaf8b32b5: add $0x8,%esi 0xaf8b32b8: sub $0x14,%edi 0xaf8b32bb: mov 0x24(%esp),%eax 0xaf8b32bf: cmp %eax,%ecx 0xaf8b32c1: jl 0xaf8b323d 0xaf8b32c7: mov (%edi),%eax 0xaf8b32c9: sub $0xc,%esi 0xaf8b32cc: add $0x4,%esi 0xaf8b32cf: sub $0x4,%edi 0xaf8b32d2: mov %eax,(%esi) 0xaf8b32d4: add $0x3c,%esp 0xaf8b32d7: mov $0xaf8b32e1,%ebx 0xaf8b32dc: jmp 0xaf4a1800 0xaf8b32e1: add %al,(%eax) 0xaf8b32e3: add %al,(%eax) 0xaf8b32e5: add %al,(%eax) 0xaf8b32e7: add %al,(%eax) 0xaf8b32e9: add %al,(%eax) 0xaf8b32eb: add %al,(%eax) 0xaf8b32ed: add %al,(%eax) 0xaf8b32ef: add %ah,(%eax) End of assembler dump.