English
Language : 

GMS30C2116 Datasheet, PDF (106/322 Pages) Hynix Semiconductor – USERS MANUAL
3-42
CHAPTER 3
3.32 Extended DSP Instructions
The extended DSP functions use the on-chip multiply-accumulate unit. Single word results
always use register G15 as destination register, while double-word results are always
placed in G14 and G15. The condition flags remain unchanged.
Format
LLext
Notation
EMUL Ld, Ls
LLext EMULU Ld, Ls
LLext EMULS Ld, Ls
LLext EMAC Ld, Ls
LLext EMACD Ld, Ls
LLext EMSUB Ld, Ls
LLext EMSUBD Ld, Ls
LLext EHMAC Ld, Ls
LLext EHMACD Ld, Ls
LLext EHCMULD Ld, Ls
LLext EHCMACD Ld, Ls
LLext EHCSUMD Ld, Ls
LLext EHCFFTD Ld, Ls
Operation
G15 := Ld * Ls;
-- signed or unsigned multiplication, single word product
G14//G15 := Ld * Ls;
-- unsigned multiplication, double word product
G14//G15 := Ld * Ls;
-- signed multiplication, double word product
G15 := G15 + Ld * Ls;
-- signed multiply/add, single word product sum
G14//G15 := G14//G15 + Ld * Ls;
-- signed multiply/add, double word product sum
G15 := G15 - Ld * Ls;
-- signed multiply/subtract, single word product difference
G14//G15 := G14//G15 - Ld * Ls;
-- signed multiply/subtract, double word product difference
G15 := G15 + Ld(31..16) * Ls(31..16) + Ld(15..0) * Ls(15..0);
-- signed halfword multiply/add, single word product sum
G14//G15 := G14//G15 + Ld(31..16) * Ls(31..16) +
Ld(15..0) * Ls(15..0);
-- signed halfword multiply/add, double word product sum
G14 := Ld(31..16) * Ls(31..16) - Ld(15..0) * Ls(15..0);
G15 := Ld(31..16) * Ls(15..0) + Ld(15..0) * Ls(31..16);
-- halfword complex multiply
G14 := G14 + Ld(31..16) * Ls(31..16) - Ld(15..0) * Ls(15..0);
G15 := G15 + Ld(31..16) * Ls(15..0) + Ld(15..0) * Ls(31..16);
-- halfword complex multiply/add
G14(31..16) := Ld(31..16) + G14;
G14(15..0) := Ld(15..0) + G15;
G15(31..16) := Ld(31..16) - G14;
G15(15..0) := Ld(15..0) - G15;
-- halfword (complex) add/subtract
-- Ls is not used and should denote the same register as Ld
G14(31..16) := Ld(31..16) + (G14 >> 15);
G14(15..0) := Ld(15..0) + (G15 >> 15);
G15(31..16) := Ld(31..16) - (G14 >> 15);
G15(15..0) := Ld(15..0) - (G15 >> 15);
-- halfword (complex) add/subtract with fixed-point
adjustment
-- Ls is not used and should denote the same register as Ld