blob: e67b7a6ce9f980ac48ec674a5d3f679f97a42a47 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
;; Jump And Link: jump to subroutine but use the return address that the caller
;; had whenever the given subroutine runs `rts`. In other words, "link" the
;; return address from the caller to the callee.
;;
;; This is in practice the same as using `jmp` but it bears the semantic
;; connotation of the `jsr` one. That is, instead of this:
;;
;; jsr subroutine
;; rts
;;
;; It's more adviseable to do the following for better stack management:
;;
;; jmp subroutine
;;
;; That being said, the `jmp` instruction is also used in many other contexts,
;; and so sometimes it's needed to clarify that: "no, I have not messed up,
;; using `jmp` here instead of `jsr` is deliberate". Hence, instead of adding a
;; comment every time this small optimization is being done, use this
;; pseudo-instruction.
.macro JAL ADDR
jmp ADDR
.endmacro
;; The __fallthrough__ special statement allows developers to explicitly tell
;; the assembler that a "fall through" situation does not happen by mistake.
.ifndef __NASM__
.macro __fallthrough__ arg
;; NOTE: nothing to do :)
.endmacro
.endif
|