$ cat test.asm %ifdef P2 ; Call with word parameters behind opcode %imacro call 2-*.nolist %? %1 %rep %0 - 1 %rotate 1 dw %1 %endrep %endmacro %warning p2 %else ; Call with word parameters behind opcode %imacro call 1-*.nolist %? %1 %rep %0 - 1 %rotate 1 dw %1 %endrep %endmacro %warning p1 %endif %ifndef REPEAT %assign REPEAT 100_000 %endif cpu 386 bits 32 org 0 %rep REPEAT call alpha call beta call gamma call delta %endrep alpha: nop nop nop beta: nop nop nop gamma: nop nop nop delta: nop nop nop $ oldnasm -v NASM version 2.15rc0 compiled on Dec 28 2018 $ time oldnasm test.asm -Wno-macro-params -DP2 test.asm:10: warning: p2 [-w+user] real 0m2.429s user 0m2.406s sys 0m0.008s $ time oldnasm test.asm -Wno-macro-params test.asm:20: warning: p1 [-w+user] real 0m9.497s user 0m7.906s sys 0m0.802s $ time oldnasm test.asm -DREPEAT=1 -DP2 test.asm:10: warning: p2 [-w+user] test.asm:37: warning: macro `call' exists, but not taking 1 parameters [-w+macro-params] test.asm:37: warning: macro `call' exists, but not taking 1 parameters [-w+macro-params] test.asm:37: warning: macro `call' exists, but not taking 1 parameters [-w+macro-params] test.asm:37: warning: macro `call' exists, but not taking 1 parameters [-w+macro-params] real 0m0.006s user 0m0.002s sys 0m0.003s $ time oldnasm test.asm -DREPEAT=1 test.asm:20: warning: p1 [-w+user] real 0m0.012s user 0m0.003s sys 0m0.002s $ /usr/bin/nasm -v NASM version 2.12.01 $ time /usr/bin/nasm test.asm -Wno-macro-params -DP2 real 0m2.238s user 0m2.225s sys 0m0.007s $ time /usr/bin/nasm test.asm -Wno-macro-params real 0m6.745s user 0m6.726s sys 0m0.005s $ time /usr/bin/nasm test.asm -DREPEAT=1 -DP2 test.asm:37: warning: macro `call' exists, but not taking 1 parameters test.asm:37: warning: macro `call' exists, but not taking 1 parameters test.asm:37: warning: macro `call' exists, but not taking 1 parameters test.asm:37: warning: macro `call' exists, but not taking 1 parameters real 0m0.006s user 0m0.001s sys 0m0.005s $ time /usr/bin/nasm test.asm -DREPEAT=1 real 0m0.004s user 0m0.001s sys 0m0.003s $ nasm -v NASM version 2.15rc0 compiled on Aug 20 2019 $ time nasm test.asm -Wno-macro-params -DP2 test.asm:10: warning: p2 [-w+user] real 0m2.520s user 0m2.510s sys 0m0.006s $ time nasm test.asm -Wno-macro-params test.asm:20: warning: p1 [-w+user] real 0m14.976s user 0m9.204s sys 0m1.168s $ time nasm test.asm -DREPEAT=1 -DP2 test.asm:10: warning: p2 [-w+user] test.asm:37: warning: multi-line macro `call' exists, but not taking 1 parameter [-w+macro-params-multi] test.asm:37: warning: multi-line macro `call' exists, but not taking 1 parameter [-w+macro-params-multi] test.asm:37: warning: multi-line macro `call' exists, but not taking 1 parameter [-w+macro-params-multi] test.asm:37: warning: multi-line macro `call' exists, but not taking 1 parameter [-w+macro-params-multi] real 0m0.006s user 0m0.002s sys 0m0.003s $ time nasm test.asm -DREPEAT=1 test.asm:20: warning: p1 [-w+user] real 0m0.004s user 0m0.001s sys 0m0.002s $