/*************************************************************************** * Copyright (c) 2002-2009, Broadcom Corporation * All Rights Reserved * Confidential Property of Broadcom Corporation * * THIS SOFTWARE MAY ONLY BE USED SUBJECT TO AN EXECUTED SOFTWARE LICENSE * AGREEMENT BETWEEN THE USER AND BROADCOM. YOU HAVE NO RIGHT TO USE OR * EXPLOIT THIS MATERIAL EXCEPT SUBJECT TO THE TERMS OF SUCH AN AGREEMENT. * * Filename: mp2_addmul.c * ***************************************************************************/ #include "mp2.h" /* * w = (w + c + x * y) / RADIX; * c = (w + c + x * y) % RADIX; */ void addmul(u32 *w, u32 *c, u32 x, u32 y) { register u32 lx = x; register u32 ly = y; register u32 x1 = x & RADIXROOTM; register u32 y1 = y & RADIXROOTM; register u32 cc = (*c) + x1 * y1; x1 = x1 * (ly >>= NBITSH) + y1 * (lx >>= NBITSH) + (cc >> NBITSH); cc = (cc & RADIXROOTM) + ((x1 & RADIXROOTM) << NBITSH) + *w; *w = ly * lx + (x1 >> NBITSH) + (cc >> NBITS); *c = (cc & RADIXM); return; }