Trying to get the new ABI working here.
This commit is contained in:
		| @@ -4,15 +4,15 @@ | |||||||
|     .globl _start |     .globl _start | ||||||
|  |  | ||||||
| _start: | _start: | ||||||
|     pushq $3                         # push the second argument |     movq $3, %rsi                   # second argument | ||||||
|     pushq $2                         # push the first argument |     movq $2, %rdi                   # first argument | ||||||
|     call power                      # call the function |     call power                      # call the function | ||||||
|     addq $16, %rsp                    # move the stack pointer back |     ;addq $16, %rsp                  # move the stack pointer back | ||||||
|     pushq %rax                      # save the first answer on stack |     pushq %rax                      # save the first answer on stack | ||||||
|     pushq $2                         # push the second argument |     movq $2, %rsi                   # push the second argument | ||||||
|     pushq $5                         # push the first argument |     movq $5, %rdi                   # push the first argument | ||||||
|     call power                      # call the function |     call power                      # call the function | ||||||
|     addq $16, %rsp                    # move the stack pointer back |     ;addq $16, %rsp                  # move the stack pointer back | ||||||
|  |  | ||||||
|     popq %rdi                       # the second answer is still in %rax, |     popq %rdi                       # the second answer is still in %rax, | ||||||
|                                     # so we can put the first one from the |                                     # so we can put the first one from the | ||||||
| @@ -35,24 +35,21 @@ power: | |||||||
|     movq %rsp, %rbp                 # make stack pointer the base pointer |     movq %rsp, %rbp                 # make stack pointer the base pointer | ||||||
|     subq $8, %rsp                   # get room for our local storage |     subq $8, %rsp                   # get room for our local storage | ||||||
|  |  | ||||||
|     movq 16(%rbp), %rdi              # put first argument in %rdi |     movq %rdi, -8(%rbp)             # store the current result | ||||||
|     movq 24(%rbp), %rsi              # put second argument in %rsi |  | ||||||
|  |  | ||||||
|     movq %rdi, -4(%rbp)              # store the current result |  | ||||||
|  |  | ||||||
|     power_loop_start: |     power_loop_start: | ||||||
|         cmpq $1, %rsi               # if the power is 1, don't do shit |         cmpq $1, %rsi               # if the power is 1, don't do shit | ||||||
|         je end_power |         je end_power | ||||||
|         movq -4(%rbp), %rax          # move the current result into %rax |         movq -8(%rbp), %rax         # move the current result into %rax | ||||||
|         imulq %rdi, %rax            # multiply the current result by the |         imulq %rdi, %rax            # multiply the current result by the | ||||||
|                                     # base number |                                     # base number | ||||||
|         movq %rax, -4(%rbp)          # store the current result |         movq %rax, -8(%rbp)         # store the current result | ||||||
|  |  | ||||||
|         decq %rsi                   # decrease the power (one down) |         decq %rsi                   # decrease the power (one down) | ||||||
|         jmp power_loop_start        # run for the next power |         jmp power_loop_start        # run for the next power | ||||||
|  |  | ||||||
|     end_power: |     end_power: | ||||||
|         movq -4(%rbp), %rax          # return value goes in %rax |         movq -8(%rbp), %rax         # return value goes in %rax | ||||||
|         movq %rbp, %rsp             # restore the stack pointer |         movq %rbp, %rsp             # restore the stack pointer | ||||||
|         popq %rbp                   # restore the base pointer |         popq %rbp                   # restore the base pointer | ||||||
|         ret |         ret | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Nicolás A. Ortega
					Nicolás A. Ortega