|
Prev: 64bit MenuetOS 0.76 and downloadable CD
Next: exception
From: Spam Killer on 17 Jan 2008 11:03 Hi! It was definitely a drag, that everything I wrote with cmovcc in it didn't run on my Classic Pentium, so I wrote me the macros below. They might come in handy for some of you too, so I post them here: cmovcc.inc %macro cmova 2.nolist jna %%1 mov %1,%2 %%1: %endmacro %macro cmovae 2.nolist jnae %%1 mov %1,%2 %%1: %endmacro %macro cmovb 2.nolist jnb %%1 mov %1,%2 %%1: %endmacro %macro cmovbe 2.nolist jnbe %%1 mov %1,%2 %%1: %endmacro %macro cmovc 2.nolist jnc %%1 mov %1,%2 %%1: %endmacro %macro cmove 2.nolist jne %%1 mov %1,%2 %%1: %endmacro %macro cmovg 2.nolist jng %%1 mov %1,%2 %%1: %endmacro %macro cmovge 2.nolist jnge %%1 mov %1,%2 %%1: %endmacro %macro cmovl 2.nolist jnl %%1 mov %1,%2 %%1: %endmacro %macro cmovle 2.nolist jnle %%1 mov %1,%2 %%1: %endmacro %macro cmovna 2.nolist ja %%1 mov %1,%2 %%1: %endmacro %macro cmovnae 2.nolist jae %%1 mov %1,%2 %%1: %endmacro %macro cmovnb 2.nolist jb %%1 mov %1,%2 %%1: %endmacro %macro cmovnbe 2.nolist jbe %%1 mov %1,%2 %%1: %endmacro %macro cmovnc 2.nolist jc %%1 mov %1,%2 %%1: %endmacro %macro cmovne 2.nolist je %%1 mov %1,%2 %%1: %endmacro %macro cmovng 2.nolist jg %%1 mov %1,%2 %%1: %endmacro %macro cmovnge 2.nolist jge %%1 mov %1,%2 %%1: %endmacro %macro cmovnl 2.nolist jl %%1 mov %1,%2 %%1: %endmacro %macro cmovnle 2.nolist jle %%1 mov %1,%2 %%1: %endmacro %macro cmovno 2.nolist jo %%1 mov %1,%2 %%1: %endmacro %macro cmovnp 2.nolist jp %%1 mov %1,%2 %%1: %endmacro %macro cmovns 2.nolist js %%1 mov %1,%2 %%1: %endmacro %macro cmovnz 2.nolist jz %%1 mov %1,%2 %%1: %endmacro %macro cmovo 2.nolist jno %%1 mov %1,%2 %%1: %endmacro %macro cmovp 2.nolist jnp %%1 mov %1,%2 %%1: %endmacro %macro cmovpe 2.nolist jpo %%1 mov %1,%2 %%1: %endmacro %macro cmovpo 2.nolist jpe %%1 mov %1,%2 %%1: %endmacro %macro cmovs 2.nolist jns %%1 mov %1,%2 %%1: %endmacro %macro cmovz 2.nolist jnz %%1 mov %1,%2 %%1: %endmacro -- wfz
From: Frank Kotler on 17 Jan 2008 11:54 Spam Killer wrote: > Hi! > > It was definitely a drag, that everything I wrote with cmovcc in it > didn't run on my Classic Pentium, so I wrote me the macros below. > They might come in handy for some of you too, so I post them here: > > cmovcc.inc Thank you! Best, Frank
From: Wolfgang Kern on 18 Jan 2008 07:55 "Spam Killer" wrote: > It was definitely a drag, that everything I wrote with cmovcc in it > didn't run on my Classic Pentium, so I wrote me the macros below. > They might come in handy for some of you too, so I post them here: > > cmovcc.inc Well, but the CPU know only 16 variants. So if your macro-engine accept double names you could save on almost half of it. in their numerical opcode order (70..7f): Jo Jno Jc = Jb = Jnae ;J< Jnc = Jnb = Jae ;J>= Jz = Je ;J= Jnz = Jne ;J<> ;J!= Jbe = Jna ;Jcoz ;J<= Jnbe= Ja ;Jncnz;J> Js ;J- ;J<0 Jns ;J+ Jp = Jpe Jnp = Jpo Jl = Jnge ;Js< Jle = Jge ;Js>= Jle = Jng ;Js<= Jnle= Jg ;Js> The ones after the semicolons are rare seen, even perhaps more explaining. __ wolfgang
From: Spam Killer on 18 Jan 2008 16:36 On Fri, 18 Jan 2008 13:55:55 +0100, "Wolfgang Kern" wrote: >Well, but the CPU know only 16 variants. >So if your macro-engine accept double names you could save on almost >half of it. > >in their numerical opcode order (70..7f): > >Jo >Jno >Jc = Jb = Jnae ;J< >... I could do: %define jb jc %define jnae jc .... Yes, that saves many lines! :-) -- wfz
From: Spam Killer on 20 Jan 2008 13:11
On Fri, 18 Jan 2008 13:55:55 +0100, "Wolfgang Kern" wrote: > >Well, but the CPU know only 16 variants. >So if your macro-engine accept double names you could save on almost >half of it. > Condition codes as macro parameters aren't bad either. ;-) I saved 100 lines! Do you see any errors? The "j%-1" inverts the conditions. [list -] %macro cmovcc 3 j%-1 %%skip mov %2,%3 %%skip: %endmacro %imacro cmovo 2.nolist cmovcc O, %1, %2 %endmacro %imacro cmovno 2.nolist cmovcc no, %1, %2 %endmacro %imacro cmovc 2.nolist cmovcc c, %1, %2 %endmacro %define cmovb cmovc %define cmovnae cmovc %imacro cmovnc 2.nolist cmovcc nc, %1, %2 %endmacro %define cmovnb cmovnc %define cmovae cmovnc %imacro cmovz 2.nolist cmovcc z, %1, %2 %endmacro %define cmove cmovz %imacro cmovnz 2.nolist cmovcc nz, %1, %2 %endmacro %define cmovne cmovnz %imacro cmovna 2.nolist cmovcc na, %1, %2 %endmacro %define cmovbe cmovna %imacro cmova 2.nolist cmovcc a, %1, %2 %endmacro %define cmovnbe cmova %imacro cmovs 2.nolist cmovcc s, %1, %2 %endmacro %imacro cmovns 2.nolist cmovcc ns, %1, %2 %endmacro %imacro cmovpe 2.nolist cmovcc pe, %1, %2 %endmacro %define cmovp cmovpe %imacro cmovpo 2.nolist cmovcc po, %1, %2 %endmacro %define cmovnp cmovpo %imacro cmovl 2.nolist cmovcc l, %1, %2 %endmacro %define cmovnge cmovl %imacro cmovnl 2.nolist cmovcc nl, %1, %2 %endmacro %define cmovge cmovnl %imacro cmovng 2.nolist cmovcc ng, %1, %2 %endmacro %define cmovle cmovng %imacro cmovg 2.nolist cmovcc g, %1, %2 %endmacro %define cmovnle cmovg [list +] -- wfz |