For example
?ë++
Code:
#define dMULTIPLYOP0_331(A,op,B,C) \
do { \
  (A)[0] op dDOT((B),(C)); \
  (A)[1] op dDOT((B+4),(C)); \
  (A)[2] op dDOT((B+8),(C)); \
} while(0)

DECL dMULTIPLY0_331(TA *A, const TB *B, const TC *C) { dMULTIPLYOP0_331(A,=,B,C); }

DECL dMULTIPLYADD0_331(TA *A, const TB *B, const TC *C) { dMULTIPLYOP0_331(A,+=,B,C); }
C2PAS32.EXE
Code:
function dMULTIPLYOP0_331(A: integer; op: integer; B: integer; C: integer): integer; 
begin
  result:= do((A)[0]opdDOT((B),(C));(A)[1]opdDOT((B+4),(C));(A)[2]opdDOT((B+8),(C));)while(0)
end;
http://opende.svn.sourceforge.net/vi...41&view=markup