Skip to content

Instantly share code, notes, and snippets.

@evanphx
Created December 2, 2008 01:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save evanphx/30928 to your computer and use it in GitHub Desktop.
Save evanphx/30928 to your computer and use it in GitHub Desktop.
sark :: git/rbx » cat scratch/hello.rb
puts "hello world"
sark :: git/rbx » ./vm/jit-test scratch/hello.rbc
0x800800 push %ebp
0x800801 mov %esp, %ebp
0x800803 sub $0xc, %esp
0x800809 push %edi
0x80080a push %esi
0x80080b push %ebx
0x80080c sub $0x10, %esp
0x800812 push 0x14(%ebp)
0x800818 push 0x10(%ebp)
0x80081e push 0xc(%ebp)
0x800824 push 0x8(%ebp)
0x80082a mov 0x10(%ebp), %esi
0x800830 mov 0x3c(%esi), %eax
0x800836 cmp $0x0, %eax
0x80083c jz 0x44 ; 0x800844
0x800842 jmp *%eax
0x800844 mov 0x8(%ebp), %eax
0x80084a mov 0x30(%eax), %ebx
0x800850 mov 0x10(%ebp), %esi
0x800856 mov 0x28(%esi), %eax
0x80085c add $0x4, %ebx
0x800862 mov %eax, 0x0(%ebx)
0x800868 mov 0x8(%ebp), %eax
0x80086e mov %ebx, 0x30(%eax)
0x800874 mov $0x0, 0x18(%esp)
0x80087f call 0xffffffffff80e8be ; 0xf0be op_push_literal
0x800884 call 0xffffffffff80ff4e ; 0x1074e op_string_dup
0x800889 mov 0xc(%ebp), %esi
0x80088f mov $0x1, 0x38(%esi)
0x800899 mov $0x1, 0x18(%esp)
0x8008a4 mov $0x1, 0x1c(%esp)
0x8008af call 0xffffffffff80eedc ; 0xf6dc op_send_stack
0x8008b4 mov $0x8008ca, %edx
0x8008b9 mov $0x7, %ecx
0x8008be cmp $0x1, %eax
0x8008c4 jz 0xfd ; 0x8008fd
0x8008ca mov 0x8(%ebp), %eax
0x8008d0 mov 0x30(%eax), %ebx
0x8008d6 sub $0x4, %ebx
0x8008dc add $0x4, %ebx
0x8008e2 mov $0xa, 0x0(%ebx)
0x8008ec mov 0x8(%ebp), %eax
0x8008f2 mov %ebx, 0x30(%eax)
0x8008f8 call 0xffffffffff80ea52 ; 0xf252 op_ret
0x8008fd mov 0x10(%ebp), %esi
0x800903 mov %ecx, 0x38(%esi)
0x800909 mov %edx, 0x3c(%esi)
0x80090f pop %ebx
0x800910 pop %esi
0x800911 pop %edi
0x800912 add $0x0, %esp
0x800918 leave
0x800919 ret
# with instruction specialization off
sark :: git/rbx » ./vm/jit-test scratch/hello.rbc
0x800800 push %ebp
0x800801 mov %esp, %ebp
0x800803 sub $0xc, %esp
0x800809 push %edi
0x80080a push %esi
0x80080b push %ebx
0x80080c sub $0x10, %esp
0x800812 push 0x14(%ebp)
0x800818 push 0x10(%ebp)
0x80081e push 0xc(%ebp)
0x800824 push 0x8(%ebp)
0x80082a mov 0x10(%ebp), %esi
0x800830 mov 0x3c(%esi), %eax
0x800836 cmp $0x0, %eax
0x80083c jz 0x44 ; 0x800844
0x800842 jmp *%eax
0x800844 call 0xffffffffff80ddfa ; 0xe5fa op_push_self
0x800849 mov $0x0, 0x18(%esp)
0x800854 call 0xffffffffff80dd9e ; 0xe59e op_push_literal
0x800859 call 0xffffffffff80f42e ; 0xfc2e op_string_dup
0x80085e mov $0x1, 0x18(%esp)
0x800869 call 0xffffffffff80e8d6 ; 0xf0d6 op_set_call_flags
0x80086e mov $0x1, 0x18(%esp)
0x800879 mov $0x1, 0x1c(%esp)
0x800884 call 0xffffffffff80e3bc ; 0xebbc op_send_stack
0x800889 mov $0x80089f, %edx
0x80088e mov $0x7, %ecx
0x800893 cmp $0x1, %eax
0x800899 jz 0xae ; 0x8008ae
0x80089f call 0xffffffffff80e13a ; 0xe93a op_pop
0x8008a4 call 0xffffffffff80dcca ; 0xe4ca op_push_true
0x8008a9 call 0xffffffffff80df32 ; 0xe732 op_ret
0x8008ae mov 0x10(%ebp), %esi
0x8008b4 mov %ecx, 0x38(%esi)
0x8008ba mov %edx, 0x3c(%esi)
0x8008c0 pop %ebx
0x8008c1 pop %esi
0x8008c2 pop %edi
0x8008c3 add $0x0, %esp
0x8008c9 leave
0x8008ca ret
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment