Lines Matching refs:op1
42 static void mpi_addsub(mpi *rop, mpi *op1, mpi *op2, int sub);
45 static INLINE BNS mpi_logic(BNS op1, BNS op2, BNS op);
46 static void mpi_log(mpi *rop, mpi *op1, mpi *op2, BNS op);
337 mpi_add(mpi *rop, mpi *op1, mpi *op2)
339 mpi_addsub(rop, op1, op2, 0);
343 mpi_addi(mpi *rop, mpi *op1, long op2)
351 mpi_addsub(rop, op1, &op, 0);
355 mpi_sub(mpi *rop, mpi *op1, mpi *op2)
357 mpi_addsub(rop, op1, op2, 1);
361 mpi_subi(mpi *rop, mpi *op1, long op2)
369 mpi_addsub(rop, op1, &op, 1);
373 mpi_addsub(mpi *rop, mpi *op1, mpi *op2, int sub)
377 if (sub ^ (op1->sign == op2->sign)) {
379 xlen = MAX(op1->size, op2->size) + 1;
384 rop->size = mp_add(rop->digs, op1->digs, op2->digs,
385 op1->size, op2->size);
386 rop->sign = op1->sign;
391 cmp = mpi_cmpabs(op1, op2);
398 xlen = MAX(op1->size, op2->size);
404 rop->size = mp_sub(rop->digs, op1->digs, op2->digs,
405 op1->size, op2->size);
406 rop->sign = op1->sign;
409 rop->size = mp_sub(rop->digs, op2->digs, op1->digs,
410 op2->size, op1->size);
418 mpi_mul(mpi *rop, mpi *op1, mpi *op2)
425 sign = op1->sign ^ op2->sign;
428 if (op1->size == 1) {
429 if (*op1->digs == 0) {
434 else if (*op1->digs == 1) {
455 if (rop->alloc < op1->size) {
456 rop->digs = mp_realloc(rop->digs, sizeof(BNS) * op1->size);
457 rop->alloc = op1->size;
459 rop->size = op1->size;
460 memmove(rop->digs, op1->digs, sizeof(BNS) * op1->size);
461 rop->sign = op1->size > 1 || *op1->digs ? sign : 0;
468 xsize = op1->size + op2->size;
469 if (rop->digs == op1->digs || rop->digs == op2->digs)
482 xsize = mp_mul(digs, op1->digs, op2->digs, op1->size, op2->size);
497 mpi_muli(mpi *rop, mpi *op1, long op2)
505 mpi_mul(rop, op1, &op);
1190 mpi_logic(BNS op1, BNS op2, BNS op)
1194 return (op1 & op2);
1196 return (op1 | op2);
1198 return (op1 ^ op2);
1205 mpi_log(mpi *rop, mpi *op1, mpi *op2, BNS op)
1216 size1 = op1->size;
1219 sign1 = op1->sign ? SMASK : 0;
1233 digs1 = op1->digs;
1288 mpi_and(mpi *rop, mpi *op1, mpi *op2)
1290 mpi_log(rop, op1, op2, '&');
1294 mpi_ior(mpi *rop, mpi *op1, mpi *op2)
1296 mpi_log(rop, op1, op2, '|');
1300 mpi_xor(mpi *rop, mpi *op1, mpi *op2)
1302 mpi_log(rop, op1, op2, '^');
1347 mpi_cmp(mpi *op1, mpi *op2)
1349 if (op1->sign ^ op2->sign)
1350 return (op1->sign ? -1 : 1);
1352 if (op1->size == op2->size) {
1355 for (i = op1->size - 1; i >= 0; i--)
1356 if ((cmp = (long)op1->digs[i] - (long)op2->digs[i]) != 0)
1359 return (cmp == 0 ? 0 : (cmp < 0) ^ op1->sign ? -1 : 1);
1362 return ((op1->size < op2->size) ^ op1->sign ? -1 : 1);
1366 mpi_cmpi(mpi *op1, long op2)
1370 if (op1->size > 2)
1371 return (op1->sign ? -1 : 1);
1373 cmp = op1->digs[0];
1374 if (op1->size == 2) {
1375 cmp |= (long)op1->digs[1] << BNSBITS;
1377 return (op2 == cmp && op1->sign ? 0 : op1->sign ? -1 : 1);
1379 if (op1->sign)
1386 mpi_cmpabs(mpi *op1, mpi *op2)
1388 if (op1->size == op2->size) {
1391 for (i = op1->size - 1; i >= 0; i--)
1392 if ((cmp = (long)op1->digs[i] - (long)op2->digs[i]) != 0)
1398 return ((op1->size < op2->size) ? -1 : 1);
1402 mpi_cmpabsi(mpi *op1, long op2)
1406 if (op1->size > 2)
1409 cmp = op1->digs[0];
1410 if (op1->size == 2)
1411 cmp |= (unsigned long)op1->digs[1] << BNSBITS;
1423 mpi_swap(mpi *op1, mpi *op2)
1425 if (op1 != op2) {
1428 memcpy(&swap, op1, sizeof(mpi));
1429 memcpy(op1, op2, sizeof(mpi));