426 // Type specific horizontal reductions
427
428 @Override
429 @ForceInline
430 public short addAll() {
431 return (short) VectorIntrinsics.reductionCoerced(
432 VECTOR_OP_ADD, Short256Vector.class, short.class, LENGTH,
433 this,
434 v -> (long) v.rOp((short) 0, (i, a, b) -> (short) (a + b)));
435 }
436
437 @Override
438 @ForceInline
439 public short andAll() {
440 return (short) VectorIntrinsics.reductionCoerced(
441 VECTOR_OP_AND, Short256Vector.class, short.class, LENGTH,
442 this,
443 v -> (long) v.rOp((short) -1, (i, a, b) -> (short) (a & b)));
444 }
445
446 // Memory operations
447
448 @Override
449 @ForceInline
450 public void intoArray(short[] a, int ix) {
451 Objects.requireNonNull(a);
452 ix = VectorIntrinsics.checkIndex(ix, a.length, LENGTH);
453 VectorIntrinsics.store(Short256Vector.class, short.class, LENGTH,
454 a, ix, this,
455 (arr, idx, v) -> v.forEach((i, a_) -> ((short[])arr)[idx + i] = a_));
456 }
457
458 @Override
459 @ForceInline
460 public void intoArray(short[] a, int ax, Mask<Short, Shapes.S256Bit> m) {
461 // TODO: use better default impl: forEach(m, (i, a_) -> a[ax + i] = a_);
462 Short256Vector oldVal = SPECIES.fromArray(a, ax);
463 Short256Vector newVal = oldVal.blend(this, m);
464 newVal.intoArray(a, ax);
465 }
|
426 // Type specific horizontal reductions
427
428 @Override
429 @ForceInline
430 public short addAll() {
431 return (short) VectorIntrinsics.reductionCoerced(
432 VECTOR_OP_ADD, Short256Vector.class, short.class, LENGTH,
433 this,
434 v -> (long) v.rOp((short) 0, (i, a, b) -> (short) (a + b)));
435 }
436
437 @Override
438 @ForceInline
439 public short andAll() {
440 return (short) VectorIntrinsics.reductionCoerced(
441 VECTOR_OP_AND, Short256Vector.class, short.class, LENGTH,
442 this,
443 v -> (long) v.rOp((short) -1, (i, a, b) -> (short) (a & b)));
444 }
445
446 @Override
447 @ForceInline
448 public short subAll() {
449 return (short) VectorIntrinsics.reductionCoerced(
450 VECTOR_OP_SUB, Short256Vector.class, short.class, LENGTH,
451 this,
452 v -> (long) v.rOp((short) 0, (i, a, b) -> (short) (a - b)));
453 }
454
455 // Memory operations
456
457 @Override
458 @ForceInline
459 public void intoArray(short[] a, int ix) {
460 Objects.requireNonNull(a);
461 ix = VectorIntrinsics.checkIndex(ix, a.length, LENGTH);
462 VectorIntrinsics.store(Short256Vector.class, short.class, LENGTH,
463 a, ix, this,
464 (arr, idx, v) -> v.forEach((i, a_) -> ((short[])arr)[idx + i] = a_));
465 }
466
467 @Override
468 @ForceInline
469 public void intoArray(short[] a, int ax, Mask<Short, Shapes.S256Bit> m) {
470 // TODO: use better default impl: forEach(m, (i, a_) -> a[ax + i] = a_);
471 Short256Vector oldVal = SPECIES.fromArray(a, ax);
472 Short256Vector newVal = oldVal.blend(this, m);
473 newVal.intoArray(a, ax);
474 }
|