本文整理汇总了C++中MUL函数的典型用法代码示例。如果您正苦于以下问题:C++ MUL函数的具体用法?C++ MUL怎么用?C++ MUL使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了MUL函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: gradMag
// compute gradient magnitude and orientation at each location (uses sse)
void gradMag( float *I, float *M, float *O, int h, int w, int d, bool full ) {
int x, y, y1, c, h4, s;
float *Gx, *Gy, *M2;
__m128 *_Gx, *_Gy, *_M2, _m;
float *acost = acosTable(), acMult = 10000.0f;
// allocate memory for storing one column of output (padded so h4%4==0)
h4 = (h % 4 == 0) ? h : h - (h % 4) + 4;
s = d * h4 * sizeof(float);
M2 = (float*) alMalloc(s, 16);
_M2 = (__m128*) M2;
Gx = (float*) alMalloc(s, 16);
_Gx = (__m128*) Gx;
Gy = (float*) alMalloc(s, 16);
_Gy = (__m128*) Gy;
// compute gradient magnitude and orientation for each column
for ( x = 0; x < w; x++ ) {
// compute gradients (Gx, Gy) with maximum squared magnitude (M2)
for (c = 0; c < d; c++) {
grad1( I + x * h + c * w * h, Gx + c * h4, Gy + c * h4, h, w, x );
for ( y = 0; y < h4 / 4; y++ ) {
y1 = h4 / 4 * c + y;
_M2[y1] = ADD(MUL(_Gx[y1], _Gx[y1]), MUL(_Gy[y1], _Gy[y1]));
if ( c == 0 ) { continue; }
_m = CMPGT( _M2[y1], _M2[y] );
_M2[y] = OR( AND(_m, _M2[y1]), ANDNOT(_m, _M2[y]) );
_Gx[y] = OR( AND(_m, _Gx[y1]), ANDNOT(_m, _Gx[y]) );
_Gy[y] = OR( AND(_m, _Gy[y1]), ANDNOT(_m, _Gy[y]) );
}
}
// compute gradient mangitude (M) and normalize Gx
for ( y = 0; y < h4 / 4; y++ ) {
_m = MINsse( RCPSQRT(_M2[y]), SET(1e10f) );
_M2[y] = RCP(_m);
if (O) { _Gx[y] = MUL( MUL(_Gx[y], _m), SET(acMult) ); }
if (O) { _Gx[y] = XOR( _Gx[y], AND(_Gy[y], SET(-0.f)) ); }
};
memcpy( M + x * h, M2, h * sizeof(float) );
// compute and store gradient orientation (O) via table lookup
if ( O != 0 ) for ( y = 0; y < h; y++ ) { O[x * h + y] = acost[(int)Gx[y]]; }
if ( O != 0 && full ) {
y1 = ((~size_t(O + x * h) + 1) & 15) / 4;
y = 0;
for ( ; y < y1; y++ ) { O[y + x * h] += (Gy[y] < 0) * PI; }
for ( ; y < h - 4; y += 4 ) STRu( O[y + x * h],
ADD( LDu(O[y + x * h]), AND(CMPLT(LDu(Gy[y]), SET(0.f)), SET(PI)) ) );
for ( ; y < h; y++ ) { O[y + x * h] += (Gy[y] < 0) * PI; }
}
}
alFree(Gx);
alFree(Gy);
alFree(M2);
}
示例2: main
int main(){
int a,b;
double c,d;
printf("Two int Input : ");
scanf("%d %d",&a,&b);
printf("%d * %d = %d\n",a,b,MUL(a,b));
printf("Two double Input : ");
scanf("%lf %lf",&c,&d);
printf("%lf * %lf = %lf\n",c,d,MUL(c,d));
return 0;
}
示例3: MUL
void RandGen::next() {
unsigned p[2], q[2], r[2], carry0, carry1;
MUL(a[0], x[0], p);
ADDEQU(p[0], c, carry0);
ADDEQU(p[1], carry0, carry1);
MUL(a[0], x[1], q);
ADDEQU(p[1], q[0], carry0);
MUL(a[1], x[0], r);
x[2] = LOW(carry0 + carry1 + CARRY(p[1], r[0]) + q[1] + r[1] +
a[0] * x[2] + a[1] * x[1] + a[2] * x[0]);
x[1] = LOW(p[1] + r[0]);
x[0] = LOW(p[0]);
}
示例4: oob
//////////////////////////////////////////////////////////////////////////
// @brief checks if streamout buffer is oob
// @return <i1> true/false
Value* oob(const STREAMOUT_COMPILE_STATE& state, Value* pSoCtx, uint32_t buffer)
{
Value* returnMask = C(false);
Value* pBuf = getSOBuffer(pSoCtx, buffer);
// load enable
// @todo bool data types should generate <i1> llvm type
Value* enabled = TRUNC(LOAD(pBuf, { 0, SWR_STREAMOUT_BUFFER_enable }), IRB()->getInt1Ty());
// load buffer size
Value* bufferSize = LOAD(pBuf, { 0, SWR_STREAMOUT_BUFFER_bufferSize });
// load current streamOffset
Value* streamOffset = LOAD(pBuf, { 0, SWR_STREAMOUT_BUFFER_streamOffset });
// load buffer pitch
Value* pitch = LOAD(pBuf, { 0, SWR_STREAMOUT_BUFFER_pitch });
// buffer is considered oob if in use in a decl but not enabled
returnMask = OR(returnMask, NOT(enabled));
// buffer is oob if cannot fit a prims worth of verts
Value* newOffset = ADD(streamOffset, MUL(pitch, C(state.numVertsPerPrim)));
returnMask = OR(returnMask, ICMP_SGT(newOffset, bufferSize));
return returnMask;
}
示例5: main
int main(int argc, const char * argv[]) {
add(1,2);
add(1,2);
PRINTMAX(12, 13);
PRINTMAX(12, 13);
printf("%d\n",MAXOFNUMBER(100, 200));
printf("*******************\n");
double sum = ADD(1.1, 2);//预处理 阶段 就会换成 1+2
printf("sum = %f\n",sum);
printf("%d\n",ADD(1, 2)*ADD(2, 3));//8 //1+2*2+3
printf("%d\n",ADD2(1, 2)*ADD2(2, 3));//(1+2)*(2+3)
printf("%d\n",MUL(3-1, 5-2));//(3-1*5-2)
printf("%d\n",MUL2(3-1, 5-2));//((3-1)*(5-2))
printf("*******************\n");
printf(kPath);
double r = 2.0;
double s = PI*r*r;
double c = 2*PI*r;
printf("s = %f c= %f\n",s,c);
return 0;
}
示例6: br_i32_mulacc
/* see inner.h */
void
br_i32_mulacc(uint32_t *d, const uint32_t *a, const uint32_t *b)
{
size_t alen, blen, u;
alen = (a[0] + 31) >> 5;
blen = (b[0] + 31) >> 5;
d[0] = a[0] + b[0];
for (u = 0; u < blen; u ++) {
uint32_t f;
size_t v;
uint64_t cc;
f = b[1 + u];
cc = 0;
for (v = 0; v < alen; v ++) {
uint64_t z;
z = (uint64_t)d[1 + u + v] + MUL(f, a[1 + v]) + cc;
cc = z >> 32;
d[1 + u + v] = (uint32_t)z;
}
d[1 + u + alen] = (uint32_t)cc;
}
}
示例7: CDD
long long CDD(int firstDigit,char * number,int digitsLeft,int NDigits)
{
long long int res;
res=firstDigit*MUL(digitsLeft,NDigits-1);
if(NDigits==1) //base case
{
#ifdef debug
printf("\nCDD ( %d,%s,%d,%d ) returning %lld",firstDigit,number,digitsLeft,NDigits,res);
#endif
return res+1;
}
if(number[1]=='0'||number[1]=='1')
{
firstDigit=0;
}
else if(number[1]<number[0])
{
firstDigit=number[1]-48+1;
}
else
{
firstDigit=number[1]-48;
}
res+=CDD(firstDigit,number+1,digitsLeft-1,NDigits-1);
#ifdef debug
printf("\nCDD ( %d,%s,%d,%d ) returning %lld",firstDigit,number,digitsLeft,NDigits,res);
#endif
return res;
}
示例8: MUL
void
gen8_vec4_generator::generate_gs_set_write_offset(struct brw_reg dst,
struct brw_reg src0,
struct brw_reg src1)
{
/* From p22 of volume 4 part 2 of the Ivy Bridge PRM (2.4.3.1 Message
* Header: M0.3):
*
* Slot 0 Offset. This field, after adding to the Global Offset field
* in the message descriptor, specifies the offset (in 256-bit units)
* from the start of the URB entry, as referenced by URB Handle 0, at
* which the data will be accessed.
*
* Similar text describes DWORD M0.4, which is slot 1 offset.
*
* Therefore, we want to multiply DWORDs 0 and 4 of src0 (the x components
* of the register for geometry shader invocations 0 and 1) by the
* immediate value in src1, and store the result in DWORDs 3 and 4 of dst.
*
* We can do this with the following EU instruction:
*
* mul(2) dst.3<1>UD src0<8;2,4>UD src1 { Align1 WE_all }
*/
default_state.access_mode = BRW_ALIGN_1;
gen8_instruction *inst =
MUL(suboffset(stride(dst, 2, 2, 1), 3), stride(src0, 8, 2, 4), src1);
gen8_set_mask_control(inst, BRW_MASK_DISABLE);
default_state.access_mode = BRW_ALIGN_16;
}
示例9: LEA
bool SamplerJitCache::Jit_GetTexDataSwizzled4() {
// Get the horizontal tile pos into tempReg1.
LEA(32, tempReg1, MScaled(uReg, SCALE_4, 0));
// Note: imm8 sign extends negative.
AND(32, R(tempReg1), Imm8(~127));
// Add vertical offset inside tile to tempReg1.
LEA(32, tempReg2, MScaled(vReg, SCALE_4, 0));
AND(32, R(tempReg2), Imm8(31));
LEA(32, tempReg1, MComplex(tempReg1, tempReg2, SCALE_4, 0));
// Add srcReg, since we'll need it at some point.
ADD(64, R(tempReg1), R(srcReg));
// Now find the vertical tile pos, and add to tempReg1.
SHR(32, R(vReg), Imm8(3));
LEA(32, EAX, MScaled(bufwReg, SCALE_4, 0));
MUL(32, R(vReg));
ADD(64, R(tempReg1), R(EAX));
// Last and possible also least, the horizontal offset inside the tile.
AND(32, R(uReg), Imm8(31));
SHR(32, R(uReg), Imm8(1));
MOV(8, R(resultReg), MRegSum(tempReg1, uReg));
FixupBranch skipNonZero = J_CC(CC_NC);
// If the horizontal offset was odd, take the upper 4.
SHR(8, R(resultReg), Imm8(4));
SetJumpTarget(skipNonZero);
// Zero out the rest of the bits.
AND(32, R(resultReg), Imm8(0x0F));
return true;
}
示例10: gradMagNorm
// normalize gradient magnitude at each location (uses sse)
void gradMagNorm( float *M, float *S, int h, int w, float norm ) {
__m128 *_M, *_S, _norm; int i=0, n=h*w, n4=n/4;
_S = (__m128*) S; _M = (__m128*) M; _norm = SET(norm);
bool sse = !(size_t(M)&15) && !(size_t(S)&15);
if(sse) for(; i<n4; i++) { *_M=MUL(*_M,RCP(ADD(*_S++,_norm))); _M++; }
if(sse) i*=4; for(; i<n; i++) M[i] /= (S[i] + norm);
}
示例11: assert
static Value *binaryExprInterp(Node *node, void *parser)
{
#ifndef NDEBUG
assert(node->type == NT_BINARY_EXPR);
#endif
BinaryExpr *e = (BinaryExpr *)node;
#ifdef LOG_INTERP
logInterpPrefix(parser);
rawlog("binaryExprInterp\n");
((Parser *)parser)->interpDepth++;
#endif
assert(e->lhs && e->rhs);
Value *lhs = e->lhs->interp(e->lhs, parser);
Value *rhs = e->rhs->interp(e->rhs, parser);
switch (e->op) {
case TK_ADD: e->value = ADD(lhs, rhs, e->value); break; /* + */
case TK_SUB: e->value = SUB(lhs, rhs, e->value); break; /* - */
case TK_MUL: e->value = MUL(lhs, rhs, e->value); break; /* * */
case TK_DIV: e->value = DIV(lhs, rhs, e->value); break; /* / */
default:
assert(0);
break;
}
#ifdef LOG_INTERP
logInterpPrefix(parser);
rawlog("%s\n", token2str(e->op));
((Parser *)parser)->interpDepth--;
#endif
return e->value;
}
示例12: main
int main() {
int x = 0;
int y = 0;
x = readInt();
y = readInt();
printf("求和结果是%d\n", MUL(x,y));
return 0;
}
示例13: VECT
bool Triangle::checkPoint(const Point& point) const
{
Point ca = VECT(points[0], points[1]);
Point cd = VECT(points[0], point);
Point ab = VECT(points[1], points[2]);
Point ad = VECT(points[1], point);
Point bc = VECT(points[2], points[0]);
Point bd = VECT(points[2], point);
int mul1 = MUL(ca, cd);
int mul2 = MUL(ab, ad);
int mul3 = MUL(bc, bd);
return ((SGN(mul1) == SGN(mul2)) &&
(SGN(mul2) == SGN(mul3)) &&
(SGN(mul3) == SGN(mul1)));
}
示例14: SET
// gradMagNorm( M, S, norm ) - operates on M - see gradientMag.m
// gradientMex('gradientMagNorm',M,S,normConst);
// normalize gradient magnitude at each location (uses sse)
void GradientMagnitudeChannel::gradMagNorm(float *M, float *S, int h, int w) {
float norm = normalizationConstant;
__m128 *_M, *_S, _norm; int i=0, n=h*w, n4=n/4;
_S = (__m128*) S; _M = (__m128*) M; _norm = SET(norm);
bool sse = !(size_t(M)&15) && !(size_t(S)&15);
if(sse) { for(; i<n4; i++) *_M++=MUL(*_M,RCP(ADD(*_S++,_norm))); i*=4; }
for(; i<n; i++) M[i] /= (S[i] + norm);
}
示例15: gradQuantize
// helper for gradHist, quantize O and M into O0, O1 and M0, M1 (uses sse)
void gradQuantize( float *O, float *M, int *O0, int *O1, float *M0, float *M1,
int nb, int n, float norm, int nOrients, bool full, bool interpolate )
{
// assumes all *OUTPUT* matrices are 4-byte aligned
int i, o0, o1; float o, od, m;
__m128i _o0, _o1, *_O0, *_O1; __m128 _o, _od, _m, *_M0, *_M1;
// define useful constants
const float oMult=(float)nOrients/(full?2*PI:PI); const int oMax=nOrients*nb;
const __m128 _norm=SET(norm), _oMult=SET(oMult), _nbf=SET((float)nb);
const __m128i _oMax=SET(oMax), _nb=SET(nb);
// perform the majority of the work with sse
_O0=(__m128i*) O0; _O1=(__m128i*) O1; _M0=(__m128*) M0; _M1=(__m128*) M1;
if( interpolate ) for( i=0; i<=n-4; i+=4 ) {
_o=MUL(LDu(O[i]),_oMult); _o0=CVT(_o); _od=SUB(_o,CVT(_o0));
_o0=CVT(MUL(CVT(_o0),_nbf)); _o0=AND(CMPGT(_oMax,_o0),_o0); *_O0++=_o0;
_o1=ADD(_o0,_nb); _o1=AND(CMPGT(_oMax,_o1),_o1); *_O1++=_o1;
_m=MUL(LDu(M[i]),_norm); *_M1=MUL(_od,_m); *_M0++=SUB(_m,*_M1); _M1++;
} else for( i=0; i<=n-4; i+=4 ) {
_o=MUL(LDu(O[i]),_oMult); _o0=CVT(ADD(_o,SET(.5f)));
_o0=CVT(MUL(CVT(_o0),_nbf)); _o0=AND(CMPGT(_oMax,_o0),_o0); *_O0++=_o0;
*_M0++=MUL(LDu(M[i]),_norm); *_M1++=SET(0.f); *_O1++=SET(0);
}
// compute trailing locations without sse
if( interpolate ) for(; i<n; i++ ) {
o=O[i]*oMult; o0=(int) o; od=o-o0;
o0*=nb; if(o0>=oMax) o0=0; O0[i]=o0;
o1=o0+nb; if(o1==oMax) o1=0; O1[i]=o1;
m=M[i]*norm; M1[i]=od*m; M0[i]=m-M1[i];
} else for(; i<n; i++ ) {
o=O[i]*oMult; o0=(int) (o+.5f);
o0*=nb; if(o0>=oMax) o0=0; O0[i]=o0;
M0[i]=M[i]*norm; M1[i]=0; O1[i]=0;
}
}