428 @Override
429 @ForceInline
430 public long addAll() {
431 return (long) VectorIntrinsics.reductionCoerced(
432 VECTOR_OP_ADD, Long64Vector.class, long.class, LENGTH,
433 this,
434 v -> (long) v.rOp((long) 0, (i, a, b) -> (long) (a + b)));
435 }
436
437 @Override
438 @ForceInline
439 public long andAll() {
440 return (long) VectorIntrinsics.reductionCoerced(
441 VECTOR_OP_AND, Long64Vector.class, long.class, LENGTH,
442 this,
443 v -> (long) v.rOp((long) -1, (i, a, b) -> (long) (a & b)));
444 }
445
446 @Override
447 @ForceInline
448 public long mulAll() {
449 return (long) VectorIntrinsics.reductionCoerced(
450 VECTOR_OP_MUL, Long64Vector.class, long.class, LENGTH,
451 this,
452 v -> (long) v.rOp((long) 1, (i, a, b) -> (long) (a * b)));
453 }
454
455 @Override
456 @ForceInline
457 public long orAll() {
458 return (long) VectorIntrinsics.reductionCoerced(
459 VECTOR_OP_OR, Long64Vector.class, long.class, LENGTH,
460 this,
461 v -> (long) v.rOp((long) 0, (i, a, b) -> (long) (a | b)));
462 }
463
464 @Override
465 @ForceInline
466 public long xorAll() {
467 return (long) VectorIntrinsics.reductionCoerced(
468 VECTOR_OP_XOR, Long64Vector.class, long.class, LENGTH,
469 this,
470 v -> (long) v.rOp((long) 0, (i, a, b) -> (long) (a ^ b)));
471 }
472
473 @Override
474 @ForceInline
475 public long subAll() {
476 return (long) VectorIntrinsics.reductionCoerced(
477 VECTOR_OP_SUB, Long64Vector.class, long.class, LENGTH,
478 this,
479 v -> (long) v.rOp((long) 0, (i, a, b) -> (long) (a - b)));
480 }
481
482 // Memory operations
483
484 @Override
485 @ForceInline
486 public void intoArray(long[] a, int ix) {
487 Objects.requireNonNull(a);
488 ix = VectorIntrinsics.checkIndex(ix, a.length, LENGTH);
489 VectorIntrinsics.store(Long64Vector.class, long.class, LENGTH,
490 a, ix, this,
491 (arr, idx, v) -> v.forEach((i, a_) -> ((long[])arr)[idx + i] = a_));
492 }
493
494 @Override
495 @ForceInline
496 public void intoArray(long[] a, int ax, Mask<Long, Shapes.S64Bit> m) {
497 // TODO: use better default impl: forEach(m, (i, a_) -> a[ax + i] = a_);
498 Long64Vector oldVal = SPECIES.fromArray(a, ax);
499 Long64Vector newVal = oldVal.blend(this, m);
|
428 @Override
429 @ForceInline
430 public long addAll() {
431 return (long) VectorIntrinsics.reductionCoerced(
432 VECTOR_OP_ADD, Long64Vector.class, long.class, LENGTH,
433 this,
434 v -> (long) v.rOp((long) 0, (i, a, b) -> (long) (a + b)));
435 }
436
437 @Override
438 @ForceInline
439 public long andAll() {
440 return (long) VectorIntrinsics.reductionCoerced(
441 VECTOR_OP_AND, Long64Vector.class, long.class, LENGTH,
442 this,
443 v -> (long) v.rOp((long) -1, (i, a, b) -> (long) (a & b)));
444 }
445
446 @Override
447 @ForceInline
448 public long subAll() {
449 return (long) VectorIntrinsics.reductionCoerced(
450 VECTOR_OP_SUB, Long64Vector.class, long.class, LENGTH,
451 this,
452 v -> (long) v.rOp((long) 0, (i, a, b) -> (long) (a - b)));
453 }
454
455 @Override
456 @ForceInline
457 public long mulAll() {
458 return (long) VectorIntrinsics.reductionCoerced(
459 VECTOR_OP_MUL, Long64Vector.class, long.class, LENGTH,
460 this,
461 v -> (long) v.rOp((long) 1, (i, a, b) -> (long) (a * b)));
462 }
463
464 @Override
465 @ForceInline
466 public long orAll() {
467 return (long) VectorIntrinsics.reductionCoerced(
468 VECTOR_OP_OR, Long64Vector.class, long.class, LENGTH,
469 this,
470 v -> (long) v.rOp((long) 0, (i, a, b) -> (long) (a | b)));
471 }
472
473 @Override
474 @ForceInline
475 public long xorAll() {
476 return (long) VectorIntrinsics.reductionCoerced(
477 VECTOR_OP_XOR, Long64Vector.class, long.class, LENGTH,
478 this,
479 v -> (long) v.rOp((long) 0, (i, a, b) -> (long) (a ^ b)));
480 }
481
482 // Memory operations
483
484 @Override
485 @ForceInline
486 public void intoArray(long[] a, int ix) {
487 Objects.requireNonNull(a);
488 ix = VectorIntrinsics.checkIndex(ix, a.length, LENGTH);
489 VectorIntrinsics.store(Long64Vector.class, long.class, LENGTH,
490 a, ix, this,
491 (arr, idx, v) -> v.forEach((i, a_) -> ((long[])arr)[idx + i] = a_));
492 }
493
494 @Override
495 @ForceInline
496 public void intoArray(long[] a, int ax, Mask<Long, Shapes.S64Bit> m) {
497 // TODO: use better default impl: forEach(m, (i, a_) -> a[ax + i] = a_);
498 Long64Vector oldVal = SPECIES.fromArray(a, ax);
499 Long64Vector newVal = oldVal.blend(this, m);
|