Get rid of unneeded function prologues/epilogues
This commit is contained in:
44
core.asm
44
core.asm
@ -16,121 +16,78 @@ section .text
|
||||
;----- min(int a, int b) -----;
|
||||
; return value: lowest value
|
||||
min:
|
||||
push rbp
|
||||
mov rbp, rsp
|
||||
|
||||
mov rax, rdi
|
||||
cmp rdi, rsi
|
||||
cmovg rax, rsi
|
||||
|
||||
leave
|
||||
ret
|
||||
;----- minu(unsigned int a, unsigned int b) -----;
|
||||
; return value: lowest value
|
||||
minu:
|
||||
push rbp
|
||||
mov rbp, rsp
|
||||
|
||||
mov rax, rdi
|
||||
cmp rdi, rsi
|
||||
cmova rax, rsi
|
||||
|
||||
leave
|
||||
ret
|
||||
;----- max(int a, int b) -----;
|
||||
; return value: highest value
|
||||
max:
|
||||
push rbp
|
||||
mov rbp, rsp
|
||||
|
||||
mov rax, rdi
|
||||
cmp rdi, rsi
|
||||
cmovl rax, rsi
|
||||
|
||||
leave
|
||||
ret
|
||||
;----- maxu(unsigned int a, unsigned int b) -----;
|
||||
; return value: highest value
|
||||
maxu:
|
||||
push rbp
|
||||
mov rbp, rsp
|
||||
|
||||
mov rax, rdi
|
||||
cmp rdi, rsi
|
||||
cmovb rax, rsi
|
||||
|
||||
leave
|
||||
ret
|
||||
;----- islower(char* c) -----;
|
||||
; return value: 1 (character is in range of 'a'-'z') or 0 (character is nog in range of 'a'-'z')
|
||||
islower:
|
||||
push rbp
|
||||
mov rbp, rsp
|
||||
|
||||
xor rax, rax
|
||||
cmp byte [rdi], 'a'
|
||||
jb .quit
|
||||
cmp byte [rdi], 'z'
|
||||
ja .quit
|
||||
mov rax, 1
|
||||
|
||||
.quit:
|
||||
leave
|
||||
ret
|
||||
;----- isupper(char* c) -----;
|
||||
; return value: 1 (character is in range of 'A'-'Z') or 0 (character is not in range of 'A'-'Z')
|
||||
isupper:
|
||||
push rbp
|
||||
mov rbp, rsp
|
||||
|
||||
xor rax, rax
|
||||
cmp byte [rdi], 'A'
|
||||
jb .quit
|
||||
cmp byte [rdi], 'Z'
|
||||
ja .quit
|
||||
mov rax, 1
|
||||
|
||||
.quit:
|
||||
leave
|
||||
ret
|
||||
;----- tolower(char* c) -----;
|
||||
; return value: ASCII value. Same as original if it was not an uppercase letter, otherwise lowercase letter
|
||||
tolower:
|
||||
push rbp
|
||||
mov rbp, rsp
|
||||
|
||||
call isupper
|
||||
mov rcx, rax
|
||||
mov al, byte [rdi]
|
||||
cmp rcx, 1
|
||||
jne .quit
|
||||
add al, 32
|
||||
|
||||
.quit:
|
||||
leave
|
||||
ret
|
||||
;----- toupper(char* c) -----;
|
||||
; return value: ASCII value. Same as original if it was not a lowercase letter, otherwise uppercase letter
|
||||
toupper:
|
||||
push rbp
|
||||
mov rbp, rsp
|
||||
|
||||
call islower
|
||||
mov rcx, rax
|
||||
mov al, byte [rdi]
|
||||
cmp rcx, 1
|
||||
jne .quit
|
||||
sub al, 32
|
||||
|
||||
.quit:
|
||||
leave
|
||||
ret
|
||||
;----- itoa(int num, char* str) -----;
|
||||
; return value: pointer to str
|
||||
itoa:
|
||||
push rbp
|
||||
mov rbp, rsp
|
||||
|
||||
push rbx
|
||||
push rsi
|
||||
push rdi
|
||||
@ -178,7 +135,6 @@ itoa:
|
||||
.quit:
|
||||
pop rax
|
||||
pop rbx
|
||||
leave
|
||||
ret
|
||||
;----- exit(int exit_code) -----;
|
||||
; returns: nothing
|
||||
|
Reference in New Issue
Block a user