From 0c6d65daa72dacff7689349ab18e13a9a5cebfd3 Mon Sep 17 00:00:00 2001 From: Rangi Date: Mon, 22 Feb 2021 17:27:35 -0500 Subject: call cc --- Optimizing-assembly-code.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/Optimizing-assembly-code.md b/Optimizing-assembly-code.md index f545ca4..dbcf2f1 100644 --- a/Optimizing-assembly-code.md +++ b/Optimizing-assembly-code.md @@ -56,6 +56,7 @@ WikiTI's advice fully applies here: - [Inlining](#inlining) - [Fallthrough](#fallthrough) - [Conditional fallthrough](#conditional-fallthrough) + - [Call a function depending on a flag](#call-a-function-depending-on-a-flag) - [Call `rst $38` depending on a flag](#call-rst-38-depending-on-a-flag) - [Jump and lookup tables](#jump-and-lookup-tables) - [Chain comparisons](#chain-comparisons) @@ -1470,6 +1471,27 @@ But do: ``` +### Call a function depending on a flag + +(The example uses `z`, but `nz`, `c`, or `nc` would also work.) + +Don't do: + +```asm + ; 5 bytes, 3 or 9 cycles + jr nz, .skip + call Foo +.skip +``` + +But do: + +```asm + ; 3 bytes, 6 or 3 cycles + call z, Foo +``` + + ### Call `rst $38` depending on a flag (The example uses `z`, but `nz`, `c`, or `nc` would also work.) -- cgit v1.2.3