vdsp 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/vdsp/vdsp.c +952 -248
- data/ext/vdsp/vdsp.h +7 -0
- data/lib/vdsp/version.rb +1 -1
- metadata +2 -2
data/ext/vdsp/vdsp.c
CHANGED
|
@@ -8,7 +8,7 @@ VALUE rb_mVdspArray;
|
|
|
8
8
|
|
|
9
9
|
VALUE rb_cDoubleScalar;
|
|
10
10
|
VALUE rb_cDoubleArray;
|
|
11
|
-
VALUE
|
|
11
|
+
VALUE rb_mUnsafeDouble;
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
// Native resource
|
|
@@ -23,6 +23,10 @@ void vdsp_array_native_resource_delete(VdspArrayNativeResource * p)
|
|
|
23
23
|
|
|
24
24
|
VdspArrayNativeResource* get_vdsp_array_native_resource(VALUE va)
|
|
25
25
|
{
|
|
26
|
+
if (!rb_obj_is_kind_of(va, rb_mVdspArray)) {
|
|
27
|
+
rb_raise(rb_eArgError, "Vdsp::Array required");
|
|
28
|
+
}
|
|
29
|
+
|
|
26
30
|
VALUE resource = rb_iv_get(va, "native_resource");
|
|
27
31
|
if (resource==Qnil) {
|
|
28
32
|
return NULL;
|
|
@@ -51,6 +55,21 @@ long get_vdsp_array_length(VALUE va)
|
|
|
51
55
|
return _a->length;
|
|
52
56
|
}
|
|
53
57
|
|
|
58
|
+
void array_param(VdspArrayParam *param, VALUE arr0, VALUE offset, VALUE stride)
|
|
59
|
+
{
|
|
60
|
+
param->res0 = get_vdsp_array_native_resource(arr0);
|
|
61
|
+
param->offset = NUM2LONG(offset);
|
|
62
|
+
param->stride = NUM2LONG(stride);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
void array_param2(VdspArrayParam *param, VALUE arr0, VALUE arr1, VALUE offset, VALUE stride)
|
|
66
|
+
{
|
|
67
|
+
param->res0 = get_vdsp_array_native_resource(arr0);
|
|
68
|
+
param->res1 = get_vdsp_array_native_resource(arr1);
|
|
69
|
+
param->offset = NUM2LONG(offset);
|
|
70
|
+
param->stride = NUM2LONG(stride);
|
|
71
|
+
}
|
|
72
|
+
|
|
54
73
|
|
|
55
74
|
// Vdsp::DoubleScalar
|
|
56
75
|
|
|
@@ -357,410 +376,1075 @@ VALUE rb_double_array_coerce(VALUE self, VALUE other)
|
|
|
357
376
|
return rb_assoc_new(other, self);
|
|
358
377
|
}
|
|
359
378
|
|
|
379
|
+
VALUE rb_double_array_vramp(VALUE cls, VALUE a, VALUE b, VALUE n)
|
|
380
|
+
{
|
|
381
|
+
double _a = NUM2DBL(a);
|
|
382
|
+
double _b = NUM2DBL(b);
|
|
383
|
+
vDSP_Length _n = NUM2LONG(n);
|
|
384
|
+
|
|
385
|
+
VALUE c = rb_class_new_instance(1, &n, rb_cDoubleArray);
|
|
386
|
+
VdspArrayNativeResource *_c = get_vdsp_array_native_resource(c);
|
|
387
|
+
|
|
388
|
+
vDSP_vrampD(&_a, &_b, _c->v.d, 1, _n);
|
|
389
|
+
|
|
390
|
+
return c;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
VALUE rb_double_array_vgen(VALUE cls, VALUE a, VALUE b, VALUE n)
|
|
394
|
+
{
|
|
395
|
+
double _a = NUM2DBL(a);
|
|
396
|
+
double _b = NUM2DBL(b);
|
|
397
|
+
vDSP_Length _n = NUM2LONG(n);
|
|
398
|
+
|
|
399
|
+
VALUE c = rb_class_new_instance(1, &n, rb_cDoubleArray);
|
|
400
|
+
VdspArrayNativeResource *_c = get_vdsp_array_native_resource(c);
|
|
401
|
+
|
|
402
|
+
vDSP_vgenD(&_a, &_b, _c->v.d, 1, _n);
|
|
403
|
+
|
|
404
|
+
return c;
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
VALUE rb_double_array_blkman_window(int argc, VALUE *argv, VALUE cls)
|
|
408
|
+
{
|
|
409
|
+
if (argc<1 || 2<argc) {
|
|
410
|
+
rb_raise(rb_eArgError, "wrong number of arguments (given %d, expected 1..2)", argc);
|
|
411
|
+
}
|
|
412
|
+
VALUE n = argv[0];
|
|
413
|
+
|
|
414
|
+
vDSP_Length _n = NUM2LONG(n);
|
|
415
|
+
int flag = 0;
|
|
416
|
+
if (argc==2) {
|
|
417
|
+
flag = (int)NUM2LONG(argv[1]);
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
VALUE c = rb_class_new_instance(1, &n, rb_cDoubleArray);
|
|
421
|
+
VdspArrayNativeResource *_c = get_vdsp_array_native_resource(c);
|
|
422
|
+
|
|
423
|
+
vDSP_blkman_windowD(_c->v.d, _n, flag);
|
|
424
|
+
|
|
425
|
+
return c;
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
VALUE rb_double_array_hamm_window(int argc, VALUE *argv, VALUE cls)
|
|
429
|
+
{
|
|
430
|
+
if (argc<1 || 2<argc) {
|
|
431
|
+
rb_raise(rb_eArgError, "wrong number of arguments (given %d, expected 1..2)", argc);
|
|
432
|
+
}
|
|
433
|
+
VALUE n = argv[0];
|
|
434
|
+
|
|
435
|
+
vDSP_Length _n = NUM2LONG(n);
|
|
436
|
+
int flag = 0;
|
|
437
|
+
if (argc==2) {
|
|
438
|
+
flag = (int)NUM2LONG(argv[1]);
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
VALUE c = rb_class_new_instance(1, &n, rb_cDoubleArray);
|
|
442
|
+
VdspArrayNativeResource *_c = get_vdsp_array_native_resource(c);
|
|
443
|
+
|
|
444
|
+
vDSP_hamm_windowD(_c->v.d, _n, flag);
|
|
445
|
+
|
|
446
|
+
return c;
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
VALUE rb_double_array_hann_window(int argc, VALUE *argv, VALUE cls)
|
|
450
|
+
{
|
|
451
|
+
if (argc<1 || 2<argc) {
|
|
452
|
+
rb_raise(rb_eArgError, "wrong number of arguments (given %d, expected 1..2)", argc);
|
|
453
|
+
}
|
|
454
|
+
VALUE n = argv[0];
|
|
455
|
+
|
|
456
|
+
vDSP_Length _n = NUM2LONG(n);
|
|
457
|
+
int flag = 0;
|
|
458
|
+
if (argc==2) {
|
|
459
|
+
flag = (int)NUM2LONG(argv[1]);
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
VALUE c = rb_class_new_instance(1, &n, rb_cDoubleArray);
|
|
463
|
+
VdspArrayNativeResource *_c = get_vdsp_array_native_resource(c);
|
|
464
|
+
|
|
465
|
+
vDSP_hann_windowD(_c->v.d, _n, flag);
|
|
466
|
+
|
|
467
|
+
return c;
|
|
468
|
+
}
|
|
469
|
+
|
|
360
470
|
|
|
361
471
|
// Vdsp static method
|
|
362
472
|
|
|
363
473
|
// c[i] = a[i] + b
|
|
364
|
-
VALUE rb_double_vsadd(
|
|
474
|
+
VALUE rb_double_vsadd(
|
|
475
|
+
VALUE cls,
|
|
476
|
+
VALUE a, VALUE a_offset, VALUE a_stride,
|
|
477
|
+
VALUE b,
|
|
478
|
+
VALUE c, VALUE c_offset, VALUE c_stride,
|
|
479
|
+
VALUE n)
|
|
365
480
|
{
|
|
366
|
-
|
|
481
|
+
VdspArrayParam _a;
|
|
482
|
+
VdspArrayParam _c;
|
|
483
|
+
|
|
484
|
+
array_param(&_a, a, a_offset, a_stride);
|
|
367
485
|
double _b = NUM2DBL(b);
|
|
368
|
-
|
|
486
|
+
array_param(&_c, c, c_offset, c_stride);
|
|
369
487
|
|
|
370
|
-
vDSP_Stride
|
|
371
|
-
vDSP_Stride _c_stride = FIX2LONG(c_stride);
|
|
372
|
-
vDSP_Stride _n = FIX2LONG(n);
|
|
488
|
+
vDSP_Stride _n = NUM2LONG(n);
|
|
373
489
|
|
|
374
|
-
vDSP_vsaddD(
|
|
490
|
+
vDSP_vsaddD(
|
|
491
|
+
_a.res0->v.d+_a.offset, _a.stride,
|
|
492
|
+
&_b,
|
|
493
|
+
_c.res0->v.d+_c.offset, _c.stride,
|
|
494
|
+
_n);
|
|
375
495
|
|
|
376
496
|
return c;
|
|
377
497
|
}
|
|
378
498
|
|
|
379
499
|
// c[i] = a[i] + b[i]
|
|
380
|
-
VALUE rb_double_vadd(
|
|
500
|
+
VALUE rb_double_vadd(
|
|
501
|
+
VALUE cls,
|
|
502
|
+
VALUE a, VALUE a_offset, VALUE a_stride,
|
|
503
|
+
VALUE b, VALUE b_offset, VALUE b_stride,
|
|
504
|
+
VALUE c, VALUE c_offset, VALUE c_stride,
|
|
505
|
+
VALUE n)
|
|
381
506
|
{
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
507
|
+
VdspArrayParam _a;
|
|
508
|
+
VdspArrayParam _b;
|
|
509
|
+
VdspArrayParam _c;
|
|
510
|
+
|
|
511
|
+
array_param(&_a, a, a_offset, a_stride);
|
|
512
|
+
array_param(&_b, b, b_offset, b_stride);
|
|
513
|
+
array_param(&_c, c, c_offset, c_stride);
|
|
385
514
|
|
|
386
|
-
vDSP_Stride
|
|
387
|
-
vDSP_Stride _b_stride = FIX2LONG(b_stride);
|
|
388
|
-
vDSP_Stride _c_stride = FIX2LONG(c_stride);
|
|
389
|
-
vDSP_Stride _n = FIX2LONG(n);
|
|
515
|
+
vDSP_Stride _n = NUM2LONG(n);
|
|
390
516
|
|
|
391
|
-
vDSP_vaddD(
|
|
517
|
+
vDSP_vaddD(
|
|
518
|
+
_a.res0->v.d+_a.offset, _a.stride,
|
|
519
|
+
_b.res0->v.d+_b.offset, _b.stride,
|
|
520
|
+
_c.res0->v.d+_c.offset, _c.stride,
|
|
521
|
+
_n);
|
|
392
522
|
|
|
393
523
|
return c;
|
|
394
524
|
}
|
|
395
525
|
|
|
396
526
|
// c[i] = a[i] - b[i]
|
|
397
|
-
VALUE rb_double_vsub(
|
|
527
|
+
VALUE rb_double_vsub(
|
|
528
|
+
VALUE cls,
|
|
529
|
+
VALUE b, VALUE b_offset, VALUE b_stride,
|
|
530
|
+
VALUE a, VALUE a_offset, VALUE a_stride,
|
|
531
|
+
VALUE c, VALUE c_offset, VALUE c_stride,
|
|
532
|
+
VALUE n)
|
|
398
533
|
{
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
534
|
+
VdspArrayParam _b;
|
|
535
|
+
VdspArrayParam _a;
|
|
536
|
+
VdspArrayParam _c;
|
|
402
537
|
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
vDSP_Stride _n =
|
|
538
|
+
array_param(&_b, b, b_offset, b_stride);
|
|
539
|
+
array_param(&_a, a, a_offset, a_stride);
|
|
540
|
+
array_param(&_c, c, c_offset, c_stride);
|
|
541
|
+
vDSP_Stride _n = NUM2LONG(n);
|
|
407
542
|
|
|
408
|
-
vDSP_vsubD(
|
|
543
|
+
vDSP_vsubD(
|
|
544
|
+
_b.res0->v.d+_b.offset, _b.stride,
|
|
545
|
+
_a.res0->v.d+_a.offset, _a.stride,
|
|
546
|
+
_c.res0->v.d+_c.offset, _c.stride,
|
|
547
|
+
_n);
|
|
409
548
|
|
|
410
549
|
return c;
|
|
411
550
|
}
|
|
412
551
|
|
|
413
552
|
// c[i] = a[i] * b
|
|
414
|
-
VALUE rb_double_vsmul(
|
|
553
|
+
VALUE rb_double_vsmul(
|
|
554
|
+
VALUE cls,
|
|
555
|
+
VALUE a, VALUE a_offset, VALUE a_stride,
|
|
556
|
+
VALUE b,
|
|
557
|
+
VALUE c, VALUE c_offset, VALUE c_stride,
|
|
558
|
+
VALUE n)
|
|
415
559
|
{
|
|
416
|
-
|
|
560
|
+
VdspArrayParam _a;
|
|
561
|
+
VdspArrayParam _c;
|
|
562
|
+
|
|
563
|
+
array_param(&_a, a, a_offset, a_stride);
|
|
417
564
|
double _b = NUM2DBL(b);
|
|
418
|
-
|
|
565
|
+
array_param(&_c, c, c_offset, c_stride);
|
|
419
566
|
|
|
420
|
-
vDSP_Stride
|
|
421
|
-
vDSP_Stride _c_stride = FIX2LONG(c_stride);
|
|
422
|
-
vDSP_Stride _n = FIX2LONG(n);
|
|
567
|
+
vDSP_Stride _n = NUM2LONG(n);
|
|
423
568
|
|
|
424
|
-
vDSP_vsmulD(
|
|
569
|
+
vDSP_vsmulD(
|
|
570
|
+
_a.res0->v.d+_a.offset, _a.stride,
|
|
571
|
+
&_b,
|
|
572
|
+
_c.res0->v.d+_c.offset, _c.stride,
|
|
573
|
+
_n);
|
|
425
574
|
|
|
426
575
|
return c;
|
|
427
576
|
}
|
|
428
577
|
|
|
429
578
|
// c[i] = a[i] * b[i]
|
|
430
|
-
VALUE rb_double_vmul(
|
|
579
|
+
VALUE rb_double_vmul(
|
|
580
|
+
VALUE cls,
|
|
581
|
+
VALUE a, VALUE a_offset, VALUE a_stride,
|
|
582
|
+
VALUE b, VALUE b_offset, VALUE b_stride,
|
|
583
|
+
VALUE c, VALUE c_offset, VALUE c_stride,
|
|
584
|
+
VALUE n)
|
|
431
585
|
{
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
586
|
+
VdspArrayParam _a;
|
|
587
|
+
VdspArrayParam _b;
|
|
588
|
+
VdspArrayParam _c;
|
|
435
589
|
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
vDSP_Stride _n = FIX2LONG(n);
|
|
590
|
+
array_param(&_a, a, a_offset, a_stride);
|
|
591
|
+
array_param(&_b, b, b_offset, b_stride);
|
|
592
|
+
array_param(&_c, c, c_offset, c_stride);
|
|
440
593
|
|
|
441
|
-
|
|
594
|
+
vDSP_Stride _n = NUM2LONG(n);
|
|
595
|
+
|
|
596
|
+
vDSP_vmulD(
|
|
597
|
+
_a.res0->v.d+_a.offset, _a.stride,
|
|
598
|
+
_b.res0->v.d+_b.offset, _b.stride,
|
|
599
|
+
_c.res0->v.d+_c.offset, _c.stride,
|
|
600
|
+
_n);
|
|
442
601
|
|
|
443
602
|
return c;
|
|
444
603
|
}
|
|
445
604
|
|
|
446
605
|
// c[i] = a[i] / b
|
|
447
|
-
VALUE rb_double_vsdiv(
|
|
606
|
+
VALUE rb_double_vsdiv(
|
|
607
|
+
VALUE cls,
|
|
608
|
+
VALUE a, VALUE a_offset, VALUE a_stride,
|
|
609
|
+
VALUE b,
|
|
610
|
+
VALUE c, VALUE c_offset, VALUE c_stride,
|
|
611
|
+
VALUE n)
|
|
448
612
|
{
|
|
449
|
-
|
|
613
|
+
VdspArrayParam _a;
|
|
614
|
+
VdspArrayParam _c;
|
|
615
|
+
|
|
616
|
+
array_param(&_a, a, a_offset, a_stride);
|
|
450
617
|
double _b = NUM2DBL(b);
|
|
451
|
-
|
|
618
|
+
array_param(&_c, c, c_offset, c_stride);
|
|
452
619
|
|
|
453
|
-
vDSP_Stride
|
|
454
|
-
vDSP_Stride _c_stride = FIX2LONG(c_stride);
|
|
455
|
-
vDSP_Stride _n = FIX2LONG(n);
|
|
620
|
+
vDSP_Stride _n = NUM2LONG(n);
|
|
456
621
|
|
|
457
|
-
vDSP_vsdivD(
|
|
622
|
+
vDSP_vsdivD(
|
|
623
|
+
_a.res0->v.d+_a.offset, _a.stride,
|
|
624
|
+
&_b,
|
|
625
|
+
_c.res0->v.d+_c.offset, _c.stride,
|
|
626
|
+
_n);
|
|
458
627
|
|
|
459
628
|
return c;
|
|
460
629
|
}
|
|
461
630
|
|
|
462
631
|
// c[i] = a / b[i]
|
|
463
|
-
VALUE rb_double_svdiv(
|
|
632
|
+
VALUE rb_double_svdiv(
|
|
633
|
+
VALUE cls,
|
|
634
|
+
VALUE a,
|
|
635
|
+
VALUE b, VALUE b_offset, VALUE b_stride,
|
|
636
|
+
VALUE c, VALUE c_offset, VALUE c_stride,
|
|
637
|
+
VALUE n)
|
|
464
638
|
{
|
|
639
|
+
VdspArrayParam _b;
|
|
640
|
+
VdspArrayParam _c;
|
|
641
|
+
|
|
465
642
|
double _a = NUM2DBL(a);
|
|
466
|
-
|
|
467
|
-
|
|
643
|
+
array_param(&_b, b, b_offset, b_stride);
|
|
644
|
+
array_param(&_c, c, c_offset, c_stride);
|
|
468
645
|
|
|
469
|
-
vDSP_Stride
|
|
470
|
-
vDSP_Stride _c_stride = FIX2LONG(c_stride);
|
|
471
|
-
vDSP_Stride _n = FIX2LONG(n);
|
|
646
|
+
vDSP_Stride _n = NUM2LONG(n);
|
|
472
647
|
|
|
473
|
-
vDSP_svdivD(
|
|
648
|
+
vDSP_svdivD(
|
|
649
|
+
&_a,
|
|
650
|
+
_b.res0->v.d+_b.offset, _b.stride,
|
|
651
|
+
_c.res0->v.d+_c.offset, _c.stride,
|
|
652
|
+
_n);
|
|
474
653
|
|
|
475
654
|
return c;
|
|
476
655
|
}
|
|
477
656
|
|
|
478
657
|
// o0[i] = i1[i] + i0[i]
|
|
479
658
|
// o1[i] = i1[i] - i0[i]
|
|
480
|
-
VALUE rb_double_vaddsub(
|
|
659
|
+
VALUE rb_double_vaddsub(
|
|
660
|
+
VALUE cls,
|
|
661
|
+
VALUE i0, VALUE i0_offset, VALUE i0_stride,
|
|
662
|
+
VALUE i1, VALUE i1_offset, VALUE i1_stride,
|
|
663
|
+
VALUE o0, VALUE o0_offset, VALUE o0_stride,
|
|
664
|
+
VALUE o1, VALUE o1_offset, VALUE o1_stride,
|
|
665
|
+
VALUE n)
|
|
481
666
|
{
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
667
|
+
VdspArrayParam _i0;
|
|
668
|
+
VdspArrayParam _i1;
|
|
669
|
+
VdspArrayParam _o0;
|
|
670
|
+
VdspArrayParam _o1;
|
|
671
|
+
|
|
672
|
+
array_param(&_i0, i0, i0_offset, i0_stride);
|
|
673
|
+
array_param(&_i1, i1, i1_offset, i1_stride);
|
|
674
|
+
array_param(&_o0, o0, o0_offset, o0_stride);
|
|
675
|
+
array_param(&_o1, o1, o1_offset, o1_stride);
|
|
486
676
|
|
|
487
|
-
vDSP_Stride
|
|
488
|
-
vDSP_Stride _i1_stride = FIX2LONG(i1_stride);
|
|
489
|
-
vDSP_Stride _o0_stride = FIX2LONG(o0_stride);
|
|
490
|
-
vDSP_Stride _o1_stride = FIX2LONG(o1_stride);
|
|
491
|
-
vDSP_Stride _n = FIX2LONG(n);
|
|
677
|
+
vDSP_Stride _n = NUM2LONG(n);
|
|
492
678
|
|
|
493
|
-
vDSP_vaddsubD(
|
|
679
|
+
vDSP_vaddsubD(
|
|
680
|
+
_i0.res0->v.d+_i0.offset, _i0.stride,
|
|
681
|
+
_i1.res0->v.d+_i1.offset, _i1.stride,
|
|
682
|
+
_o0.res0->v.d+_o0.offset, _o0.stride,
|
|
683
|
+
_o1.res0->v.d+_o1.offset, _o1.stride,
|
|
684
|
+
_n);
|
|
494
685
|
|
|
495
686
|
return rb_assoc_new(o0, o1);
|
|
496
687
|
}
|
|
497
688
|
|
|
498
689
|
// c[i] = a[i] / b[i]
|
|
499
|
-
VALUE rb_double_vdiv(
|
|
690
|
+
VALUE rb_double_vdiv(
|
|
691
|
+
VALUE cls,
|
|
692
|
+
VALUE b, VALUE b_offset, VALUE b_stride,
|
|
693
|
+
VALUE a, VALUE a_offset, VALUE a_stride,
|
|
694
|
+
VALUE c, VALUE c_offset, VALUE c_stride,
|
|
695
|
+
VALUE n)
|
|
500
696
|
{
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
697
|
+
VdspArrayParam _b;
|
|
698
|
+
VdspArrayParam _a;
|
|
699
|
+
VdspArrayParam _c;
|
|
700
|
+
|
|
701
|
+
array_param(&_b, b, b_offset, b_stride);
|
|
702
|
+
array_param(&_a, a, a_offset, a_stride);
|
|
703
|
+
array_param(&_c, c, c_offset, c_stride);
|
|
504
704
|
|
|
505
|
-
vDSP_Stride
|
|
506
|
-
vDSP_Stride _a_stride = FIX2LONG(a_stride);
|
|
507
|
-
vDSP_Stride _c_stride = FIX2LONG(c_stride);
|
|
508
|
-
vDSP_Stride _n = FIX2LONG(n);
|
|
705
|
+
vDSP_Stride _n = NUM2LONG(n);
|
|
509
706
|
|
|
510
|
-
vDSP_vdivD(
|
|
707
|
+
vDSP_vdivD(
|
|
708
|
+
_b.res0->v.d+_b.offset, _c.stride,
|
|
709
|
+
_a.res0->v.d+_a.offset, _a.stride,
|
|
710
|
+
_c.res0->v.d+_c.offset, _c.stride,
|
|
711
|
+
_n);
|
|
511
712
|
|
|
512
713
|
return c;
|
|
513
714
|
}
|
|
514
715
|
|
|
515
716
|
// d[i] = (a[i] + b[i]) * c
|
|
516
|
-
VALUE rb_double_vasm(
|
|
717
|
+
VALUE rb_double_vasm(
|
|
718
|
+
VALUE cls,
|
|
719
|
+
VALUE a, VALUE a_offset, VALUE a_stride,
|
|
720
|
+
VALUE b, VALUE b_offset, VALUE b_stride,
|
|
721
|
+
VALUE c,
|
|
722
|
+
VALUE d, VALUE d_offset, VALUE d_stride,
|
|
723
|
+
VALUE n)
|
|
517
724
|
{
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
725
|
+
VdspArrayParam _a;
|
|
726
|
+
VdspArrayParam _b;
|
|
727
|
+
VdspArrayParam _d;
|
|
728
|
+
|
|
729
|
+
array_param(&_a, a, a_offset, a_stride);
|
|
730
|
+
array_param(&_b, b, b_offset, b_stride);
|
|
731
|
+
double _c = NUM2DBL(c);
|
|
732
|
+
array_param(&_d, d, d_offset, d_stride);
|
|
522
733
|
|
|
523
|
-
vDSP_Stride
|
|
524
|
-
vDSP_Stride _b_stride = FIX2LONG(b_stride);
|
|
525
|
-
vDSP_Stride _d_stride = FIX2LONG(d_stride);
|
|
526
|
-
vDSP_Stride _n = FIX2LONG(n);
|
|
734
|
+
vDSP_Stride _n = NUM2LONG(n);
|
|
527
735
|
|
|
528
|
-
vDSP_vasmD(
|
|
736
|
+
vDSP_vasmD(
|
|
737
|
+
_a.res0->v.d+_a.offset, _a.stride,
|
|
738
|
+
_b.res0->v.d+_b.offset, _b.stride,
|
|
739
|
+
&_c,
|
|
740
|
+
_d.res0->v.d+_d.offset, _d.stride,
|
|
741
|
+
_n);
|
|
529
742
|
|
|
530
743
|
return d;
|
|
531
744
|
}
|
|
532
745
|
|
|
533
746
|
// d[i] = (a[i] + b[i]) * c[i]
|
|
534
|
-
VALUE rb_double_vam(
|
|
747
|
+
VALUE rb_double_vam(
|
|
748
|
+
VALUE cls,
|
|
749
|
+
VALUE a, VALUE a_offset, VALUE a_stride,
|
|
750
|
+
VALUE b, VALUE b_offset, VALUE b_stride,
|
|
751
|
+
VALUE c, VALUE c_offset, VALUE c_stride,
|
|
752
|
+
VALUE d, VALUE d_offset, VALUE d_stride,
|
|
753
|
+
VALUE n)
|
|
535
754
|
{
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
755
|
+
VdspArrayParam _a;
|
|
756
|
+
VdspArrayParam _b;
|
|
757
|
+
VdspArrayParam _c;
|
|
758
|
+
VdspArrayParam _d;
|
|
759
|
+
|
|
760
|
+
array_param(&_a, a, a_offset, a_stride);
|
|
761
|
+
array_param(&_b, b, b_offset, b_stride);
|
|
762
|
+
array_param(&_c, c, c_offset, c_stride);
|
|
763
|
+
array_param(&_d, d, d_offset, d_stride);
|
|
540
764
|
|
|
541
|
-
vDSP_Stride
|
|
542
|
-
vDSP_Stride _b_stride = FIX2LONG(b_stride);
|
|
543
|
-
vDSP_Stride _c_stride = FIX2LONG(c_stride);
|
|
544
|
-
vDSP_Stride _d_stride = FIX2LONG(d_stride);
|
|
545
|
-
vDSP_Stride _n = FIX2LONG(n);
|
|
765
|
+
vDSP_Stride _n = NUM2LONG(n);
|
|
546
766
|
|
|
547
|
-
vDSP_vamD(
|
|
767
|
+
vDSP_vamD(
|
|
768
|
+
_a.res0->v.d+_a.offset, _a.stride,
|
|
769
|
+
_b.res0->v.d+_b.offset, _c.stride,
|
|
770
|
+
_c.res0->v.d+_c.offset, _c.stride,
|
|
771
|
+
_d.res0->v.d+_d.offset, _d.stride,
|
|
772
|
+
_n);
|
|
548
773
|
|
|
549
774
|
return d;
|
|
550
775
|
}
|
|
551
776
|
|
|
552
777
|
// d[i] = (a[i] - b[i]) * c
|
|
553
|
-
VALUE rb_double_vsbsm(
|
|
778
|
+
VALUE rb_double_vsbsm(
|
|
779
|
+
VALUE cls,
|
|
780
|
+
VALUE a, VALUE a_offset, VALUE a_stride,
|
|
781
|
+
VALUE b, VALUE b_offset, VALUE b_stride,
|
|
782
|
+
VALUE c,
|
|
783
|
+
VALUE d, VALUE d_offset, VALUE d_stride,
|
|
784
|
+
VALUE n)
|
|
554
785
|
{
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
786
|
+
VdspArrayParam _a;
|
|
787
|
+
VdspArrayParam _b;
|
|
788
|
+
VdspArrayParam _d;
|
|
789
|
+
|
|
790
|
+
array_param(&_a, a, a_offset, a_stride);
|
|
791
|
+
array_param(&_b, b, b_offset, b_stride);
|
|
792
|
+
double _c = NUM2DBL(c);
|
|
793
|
+
array_param(&_d, d, d_offset, d_stride);
|
|
559
794
|
|
|
560
|
-
vDSP_Stride
|
|
561
|
-
vDSP_Stride _b_stride = FIX2LONG(b_stride);
|
|
562
|
-
vDSP_Stride _d_stride = FIX2LONG(d_stride);
|
|
563
|
-
vDSP_Stride _n = FIX2LONG(n);
|
|
795
|
+
vDSP_Stride _n = NUM2LONG(n);
|
|
564
796
|
|
|
565
|
-
vDSP_vsbsmD(
|
|
797
|
+
vDSP_vsbsmD(
|
|
798
|
+
_a.res0->v.d+_a.offset, _a.stride,
|
|
799
|
+
_b.res0->v.d+_b.offset, _b.stride,
|
|
800
|
+
&_c,
|
|
801
|
+
_d.res0->v.d+_d.offset, _d.stride,
|
|
802
|
+
_n);
|
|
566
803
|
|
|
567
804
|
return d;
|
|
568
805
|
}
|
|
569
806
|
|
|
570
807
|
// d[i] = (a[i] - b[i]) * c[i]
|
|
571
|
-
VALUE rb_double_vsbm(
|
|
808
|
+
VALUE rb_double_vsbm(
|
|
809
|
+
VALUE cls,
|
|
810
|
+
VALUE a, VALUE a_offset, VALUE a_stride,
|
|
811
|
+
VALUE b, VALUE b_offset, VALUE b_stride,
|
|
812
|
+
VALUE c, VALUE c_offset, VALUE c_stride,
|
|
813
|
+
VALUE d, VALUE d_offset, VALUE d_stride,
|
|
814
|
+
VALUE n)
|
|
572
815
|
{
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
816
|
+
VdspArrayParam _a;
|
|
817
|
+
VdspArrayParam _b;
|
|
818
|
+
VdspArrayParam _c;
|
|
819
|
+
VdspArrayParam _d;
|
|
820
|
+
|
|
821
|
+
array_param(&_a, a, a_offset, a_stride);
|
|
822
|
+
array_param(&_b, b, b_offset, b_stride);
|
|
823
|
+
array_param(&_c, c, c_offset, c_stride);
|
|
824
|
+
array_param(&_d, d, d_offset, d_stride);
|
|
577
825
|
|
|
578
|
-
vDSP_Stride
|
|
579
|
-
vDSP_Stride _b_stride = FIX2LONG(b_stride);
|
|
580
|
-
vDSP_Stride _c_stride = FIX2LONG(c_stride);
|
|
581
|
-
vDSP_Stride _d_stride = FIX2LONG(d_stride);
|
|
582
|
-
vDSP_Stride _n = FIX2LONG(n);
|
|
826
|
+
vDSP_Stride _n = NUM2LONG(n);
|
|
583
827
|
|
|
584
|
-
vDSP_vsbmD(
|
|
828
|
+
vDSP_vsbmD(
|
|
829
|
+
_a.res0->v.d+_a.offset, _a.stride,
|
|
830
|
+
_b.res0->v.d+_b.offset, _c.stride,
|
|
831
|
+
_c.res0->v.d+_c.offset, _c.stride,
|
|
832
|
+
_d.res0->v.d+_d.offset, _d.stride,
|
|
833
|
+
_n);
|
|
585
834
|
|
|
586
835
|
return d;
|
|
587
836
|
}
|
|
588
837
|
|
|
589
838
|
// d[i] = (a[i] * b[i]) + c
|
|
590
|
-
VALUE rb_double_vmsa(
|
|
839
|
+
VALUE rb_double_vmsa(
|
|
840
|
+
VALUE cls,
|
|
841
|
+
VALUE a, VALUE a_offset, VALUE a_stride,
|
|
842
|
+
VALUE b, VALUE b_offset, VALUE b_stride,
|
|
843
|
+
VALUE c,
|
|
844
|
+
VALUE d, VALUE d_offset, VALUE d_stride,
|
|
845
|
+
VALUE n)
|
|
591
846
|
{
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
847
|
+
VdspArrayParam _a;
|
|
848
|
+
VdspArrayParam _b;
|
|
849
|
+
VdspArrayParam _d;
|
|
850
|
+
|
|
851
|
+
array_param(&_a, a, a_offset, a_stride);
|
|
852
|
+
array_param(&_b, b, b_offset, b_stride);
|
|
853
|
+
double _c = NUM2DBL(c);
|
|
854
|
+
array_param(&_d, d, d_offset, d_stride);
|
|
596
855
|
|
|
597
|
-
vDSP_Stride
|
|
598
|
-
vDSP_Stride _b_stride = FIX2LONG(b_stride);
|
|
599
|
-
vDSP_Stride _d_stride = FIX2LONG(d_stride);
|
|
600
|
-
vDSP_Stride _n = FIX2LONG(n);
|
|
856
|
+
vDSP_Stride _n = NUM2LONG(n);
|
|
601
857
|
|
|
602
|
-
vDSP_vmsaD(
|
|
858
|
+
vDSP_vmsaD(
|
|
859
|
+
_a.res0->v.d+_a.offset, _a.stride,
|
|
860
|
+
_b.res0->v.d+_b.offset, _b.stride,
|
|
861
|
+
&_c,
|
|
862
|
+
_d.res0->v.d+_d.offset, _d.stride,
|
|
863
|
+
_n);
|
|
603
864
|
|
|
604
865
|
return d;
|
|
605
866
|
}
|
|
606
867
|
|
|
607
868
|
// d[i] = (a[i] * b) + c[i]
|
|
608
|
-
VALUE rb_double_vsma(
|
|
869
|
+
VALUE rb_double_vsma(
|
|
870
|
+
VALUE cls,
|
|
871
|
+
VALUE a, VALUE a_offset, VALUE a_stride,
|
|
872
|
+
VALUE b,
|
|
873
|
+
VALUE c, VALUE c_offset, VALUE c_stride,
|
|
874
|
+
VALUE d, VALUE d_offset, VALUE d_stride,
|
|
875
|
+
VALUE n)
|
|
609
876
|
{
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
877
|
+
VdspArrayParam _a;
|
|
878
|
+
VdspArrayParam _c;
|
|
879
|
+
VdspArrayParam _d;
|
|
880
|
+
|
|
881
|
+
array_param(&_a, a, a_offset, a_stride);
|
|
882
|
+
double _b = NUM2DBL(b);
|
|
883
|
+
array_param(&_c, c, c_offset, c_stride);
|
|
884
|
+
array_param(&_d, d, d_offset, d_stride);
|
|
614
885
|
|
|
615
|
-
vDSP_Stride
|
|
616
|
-
vDSP_Stride _c_stride = FIX2LONG(c_stride);
|
|
617
|
-
vDSP_Stride _d_stride = FIX2LONG(d_stride);
|
|
618
|
-
vDSP_Stride _n = FIX2LONG(n);
|
|
886
|
+
vDSP_Stride _n = NUM2LONG(n);
|
|
619
887
|
|
|
620
|
-
vDSP_vsmaD(
|
|
888
|
+
vDSP_vsmaD(
|
|
889
|
+
_a.res0->v.d+_a.offset, _a.stride,
|
|
890
|
+
&_b,
|
|
891
|
+
_c.res0->v.d+_c.offset, _c.stride,
|
|
892
|
+
_d.res0->v.d+_d.offset, _d.stride,
|
|
893
|
+
_n);
|
|
621
894
|
|
|
622
895
|
return d;
|
|
623
896
|
}
|
|
624
897
|
|
|
625
898
|
// d[i] = (a[i] * b[i]) + c[i]
|
|
626
|
-
VALUE rb_double_vma(
|
|
899
|
+
VALUE rb_double_vma(
|
|
900
|
+
VALUE cls,
|
|
901
|
+
VALUE a, VALUE a_offset, VALUE a_stride,
|
|
902
|
+
VALUE b, VALUE b_offset, VALUE b_stride,
|
|
903
|
+
VALUE c, VALUE c_offset, VALUE c_stride,
|
|
904
|
+
VALUE d, VALUE d_offset, VALUE d_stride,
|
|
905
|
+
VALUE n)
|
|
627
906
|
{
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
907
|
+
VdspArrayParam _a;
|
|
908
|
+
VdspArrayParam _b;
|
|
909
|
+
VdspArrayParam _c;
|
|
910
|
+
VdspArrayParam _d;
|
|
911
|
+
|
|
912
|
+
array_param(&_a, a, a_offset, a_stride);
|
|
913
|
+
array_param(&_b, b, b_offset, b_stride);
|
|
914
|
+
array_param(&_c, c, c_offset, c_stride);
|
|
915
|
+
array_param(&_d, d, d_offset, d_stride);
|
|
632
916
|
|
|
633
|
-
vDSP_Stride
|
|
634
|
-
vDSP_Stride _b_stride = FIX2LONG(b_stride);
|
|
635
|
-
vDSP_Stride _c_stride = FIX2LONG(c_stride);
|
|
636
|
-
vDSP_Stride _d_stride = FIX2LONG(d_stride);
|
|
637
|
-
vDSP_Stride _n = FIX2LONG(n);
|
|
917
|
+
vDSP_Stride _n = NUM2LONG(n);
|
|
638
918
|
|
|
639
|
-
vDSP_vmaD(
|
|
919
|
+
vDSP_vmaD(
|
|
920
|
+
_a.res0->v.d+_a.offset, _a.stride,
|
|
921
|
+
_b.res0->v.d+_b.offset, _c.stride,
|
|
922
|
+
_c.res0->v.d+_c.offset, _c.stride,
|
|
923
|
+
_d.res0->v.d+_d.offset, _d.stride,
|
|
924
|
+
_n);
|
|
640
925
|
|
|
641
926
|
return d;
|
|
642
927
|
}
|
|
643
928
|
|
|
644
929
|
// d[i] = (a[i] * b[i]) - c[i]
|
|
645
|
-
VALUE rb_double_vmsb(
|
|
930
|
+
VALUE rb_double_vmsb(
|
|
931
|
+
VALUE cls,
|
|
932
|
+
VALUE a, VALUE a_offset, VALUE a_stride,
|
|
933
|
+
VALUE b, VALUE b_offset, VALUE b_stride,
|
|
934
|
+
VALUE c, VALUE c_offset, VALUE c_stride,
|
|
935
|
+
VALUE d, VALUE d_offset, VALUE d_stride,
|
|
936
|
+
VALUE n)
|
|
646
937
|
{
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
938
|
+
VdspArrayParam _a;
|
|
939
|
+
VdspArrayParam _b;
|
|
940
|
+
VdspArrayParam _c;
|
|
941
|
+
VdspArrayParam _d;
|
|
651
942
|
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
vDSP_Stride _n = FIX2LONG(n);
|
|
943
|
+
array_param(&_a, a, a_offset, a_stride);
|
|
944
|
+
array_param(&_b, b, b_offset, b_stride);
|
|
945
|
+
array_param(&_c, c, c_offset, c_stride);
|
|
946
|
+
array_param(&_d, d, d_offset, d_stride);
|
|
657
947
|
|
|
658
|
-
|
|
948
|
+
vDSP_Stride _n = NUM2LONG(n);
|
|
949
|
+
|
|
950
|
+
vDSP_vmsbD(
|
|
951
|
+
_a.res0->v.d+_a.offset, _a.stride,
|
|
952
|
+
_b.res0->v.d+_b.offset, _c.stride,
|
|
953
|
+
_c.res0->v.d+_c.offset, _c.stride,
|
|
954
|
+
_d.res0->v.d+_d.offset, _d.stride,
|
|
955
|
+
_n);
|
|
659
956
|
|
|
660
957
|
return d;
|
|
661
958
|
}
|
|
662
959
|
|
|
663
960
|
// e[i] = (a[i] * b) + (c[i] * d)
|
|
664
|
-
VALUE rb_double_vsmsma(
|
|
961
|
+
VALUE rb_double_vsmsma(
|
|
962
|
+
VALUE cls,
|
|
963
|
+
VALUE a, VALUE a_offset, VALUE a_stride,
|
|
964
|
+
VALUE b,
|
|
965
|
+
VALUE c, VALUE c_offset, VALUE c_stride,
|
|
966
|
+
VALUE d,
|
|
967
|
+
VALUE e, VALUE e_offset, VALUE e_stride,
|
|
968
|
+
VALUE n)
|
|
665
969
|
{
|
|
666
|
-
|
|
970
|
+
VdspArrayParam _a;
|
|
971
|
+
VdspArrayParam _c;
|
|
972
|
+
VdspArrayParam _e;
|
|
973
|
+
|
|
974
|
+
array_param(&_a, a, a_offset, a_stride);
|
|
667
975
|
double _b = NUM2DBL(b);
|
|
668
|
-
|
|
976
|
+
array_param(&_c, c, c_offset, c_stride);
|
|
669
977
|
double _d = NUM2DBL(d);
|
|
670
|
-
|
|
978
|
+
array_param(&_e, e, e_offset, e_stride);
|
|
671
979
|
|
|
672
|
-
vDSP_Stride
|
|
673
|
-
vDSP_Stride _c_stride = FIX2LONG(c_stride);
|
|
674
|
-
vDSP_Stride _e_stride = FIX2LONG(e_stride);
|
|
675
|
-
vDSP_Stride _n = FIX2LONG(n);
|
|
980
|
+
vDSP_Stride _n = NUM2LONG(n);
|
|
676
981
|
|
|
677
|
-
vDSP_vsmsmaD(
|
|
982
|
+
vDSP_vsmsmaD(
|
|
983
|
+
_a.res0->v.d+_a.offset, _a.stride,
|
|
984
|
+
&_b,
|
|
985
|
+
_c.res0->v.d+_c.offset, _c.stride,
|
|
986
|
+
&_d,
|
|
987
|
+
_e.res0->v.d+_e.offset, _e.stride,
|
|
988
|
+
_n);
|
|
678
989
|
|
|
679
990
|
return e;
|
|
680
991
|
}
|
|
681
992
|
|
|
682
993
|
// e[i] = (a[i] + b[i]) * (c[i] + d[i])
|
|
683
|
-
VALUE rb_double_vaam(
|
|
994
|
+
VALUE rb_double_vaam(int argc, VALUE *argv, VALUE cls)
|
|
684
995
|
{
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
996
|
+
if (argc!=16) {
|
|
997
|
+
rb_raise(rb_eArgError, "wrong number of arguments (given %d, expected 16)", argc);
|
|
998
|
+
}
|
|
999
|
+
VALUE a = argv[0];
|
|
1000
|
+
VALUE a_offset = argv[1];
|
|
1001
|
+
VALUE a_stride = argv[2];
|
|
1002
|
+
VALUE b = argv[3];
|
|
1003
|
+
VALUE b_offset = argv[4];
|
|
1004
|
+
VALUE b_stride = argv[5];
|
|
1005
|
+
VALUE c = argv[6];
|
|
1006
|
+
VALUE c_offset = argv[7];
|
|
1007
|
+
VALUE c_stride = argv[8];
|
|
1008
|
+
VALUE d = argv[9];
|
|
1009
|
+
VALUE d_offset = argv[10];
|
|
1010
|
+
VALUE d_stride = argv[11];
|
|
1011
|
+
VALUE e = argv[12];
|
|
1012
|
+
VALUE e_offset = argv[13];
|
|
1013
|
+
VALUE e_stride = argv[14];
|
|
1014
|
+
VALUE n = argv[15];
|
|
1015
|
+
|
|
1016
|
+
VdspArrayParam _a;
|
|
1017
|
+
VdspArrayParam _b;
|
|
1018
|
+
VdspArrayParam _c;
|
|
1019
|
+
VdspArrayParam _d;
|
|
1020
|
+
VdspArrayParam _e;
|
|
1021
|
+
|
|
1022
|
+
array_param(&_a, a, a_offset, a_stride);
|
|
1023
|
+
array_param(&_b, b, b_offset, b_stride);
|
|
1024
|
+
array_param(&_c, c, c_offset, c_stride);
|
|
1025
|
+
array_param(&_d, d, d_offset, d_stride);
|
|
1026
|
+
array_param(&_e, e, e_offset, e_stride);
|
|
1027
|
+
|
|
1028
|
+
vDSP_Stride _n = NUM2LONG(n);
|
|
1029
|
+
|
|
1030
|
+
vDSP_vaamD(
|
|
1031
|
+
_a.res0->v.d+_a.offset, _a.stride,
|
|
1032
|
+
_b.res0->v.d+_b.offset, _b.stride,
|
|
1033
|
+
_c.res0->v.d+_c.offset, _c.stride,
|
|
1034
|
+
_d.res0->v.d+_d.offset, _d.stride,
|
|
1035
|
+
_e.res0->v.d+_e.offset, _e.stride,
|
|
1036
|
+
_n);
|
|
690
1037
|
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
vDSP_Stride _c_stride = FIX2LONG(c_stride);
|
|
694
|
-
vDSP_Stride _d_stride = FIX2LONG(d_stride);
|
|
695
|
-
vDSP_Stride _e_stride = FIX2LONG(e_stride);
|
|
696
|
-
vDSP_Stride _n = FIX2LONG(n);
|
|
1038
|
+
return e;
|
|
1039
|
+
}
|
|
697
1040
|
|
|
698
|
-
|
|
1041
|
+
// e[i] = (a[i] * b[i]) - (c[i] * d[i])
|
|
1042
|
+
VALUE rb_double_vmmsb(int argc, VALUE *argv, VALUE cls)
|
|
1043
|
+
{
|
|
1044
|
+
if (argc!=16) {
|
|
1045
|
+
rb_raise(rb_eArgError, "wrong number of arguments (given %d, expected 16)", argc);
|
|
1046
|
+
}
|
|
1047
|
+
VALUE a = argv[0];
|
|
1048
|
+
VALUE a_offset = argv[1];
|
|
1049
|
+
VALUE a_stride = argv[2];
|
|
1050
|
+
VALUE b = argv[3];
|
|
1051
|
+
VALUE b_offset = argv[4];
|
|
1052
|
+
VALUE b_stride = argv[5];
|
|
1053
|
+
VALUE c = argv[6];
|
|
1054
|
+
VALUE c_offset = argv[7];
|
|
1055
|
+
VALUE c_stride = argv[8];
|
|
1056
|
+
VALUE d = argv[9];
|
|
1057
|
+
VALUE d_offset = argv[10];
|
|
1058
|
+
VALUE d_stride = argv[11];
|
|
1059
|
+
VALUE e = argv[12];
|
|
1060
|
+
VALUE e_offset = argv[13];
|
|
1061
|
+
VALUE e_stride = argv[14];
|
|
1062
|
+
VALUE n = argv[15];
|
|
1063
|
+
|
|
1064
|
+
VdspArrayParam _a;
|
|
1065
|
+
VdspArrayParam _b;
|
|
1066
|
+
VdspArrayParam _c;
|
|
1067
|
+
VdspArrayParam _d;
|
|
1068
|
+
VdspArrayParam _e;
|
|
1069
|
+
|
|
1070
|
+
array_param(&_a, a, a_offset, a_stride);
|
|
1071
|
+
array_param(&_b, b, b_offset, b_stride);
|
|
1072
|
+
array_param(&_c, c, c_offset, c_stride);
|
|
1073
|
+
array_param(&_d, d, d_offset, d_stride);
|
|
1074
|
+
array_param(&_e, e, e_offset, e_stride);
|
|
1075
|
+
|
|
1076
|
+
vDSP_Stride _n = NUM2LONG(n);
|
|
1077
|
+
|
|
1078
|
+
vDSP_vmmsbD(
|
|
1079
|
+
_a.res0->v.d+_a.offset, _a.stride,
|
|
1080
|
+
_b.res0->v.d+_b.offset, _b.stride,
|
|
1081
|
+
_c.res0->v.d+_c.offset, _c.stride,
|
|
1082
|
+
_d.res0->v.d+_d.offset, _d.stride,
|
|
1083
|
+
_e.res0->v.d+_e.offset, _e.stride,
|
|
1084
|
+
_n);
|
|
699
1085
|
|
|
700
1086
|
return e;
|
|
701
1087
|
}
|
|
702
1088
|
|
|
703
|
-
// e[i] = (a[i]
|
|
704
|
-
VALUE
|
|
1089
|
+
// e[i] = (a[i] - b[i]) * (c[i] - d[i])
|
|
1090
|
+
VALUE rb_double_vsbsbm(int argc, VALUE *argv, VALUE cls)
|
|
705
1091
|
{
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
1092
|
+
if (argc!=16) {
|
|
1093
|
+
rb_raise(rb_eArgError, "wrong number of arguments (given %d, expected 16)", argc);
|
|
1094
|
+
}
|
|
1095
|
+
VALUE a = argv[0];
|
|
1096
|
+
VALUE a_offset = argv[1];
|
|
1097
|
+
VALUE a_stride = argv[2];
|
|
1098
|
+
VALUE b = argv[3];
|
|
1099
|
+
VALUE b_offset = argv[4];
|
|
1100
|
+
VALUE b_stride = argv[5];
|
|
1101
|
+
VALUE c = argv[6];
|
|
1102
|
+
VALUE c_offset = argv[7];
|
|
1103
|
+
VALUE c_stride = argv[8];
|
|
1104
|
+
VALUE d = argv[9];
|
|
1105
|
+
VALUE d_offset = argv[10];
|
|
1106
|
+
VALUE d_stride = argv[11];
|
|
1107
|
+
VALUE e = argv[12];
|
|
1108
|
+
VALUE e_offset = argv[13];
|
|
1109
|
+
VALUE e_stride = argv[14];
|
|
1110
|
+
VALUE n = argv[15];
|
|
1111
|
+
|
|
1112
|
+
VdspArrayParam _a;
|
|
1113
|
+
VdspArrayParam _b;
|
|
1114
|
+
VdspArrayParam _c;
|
|
1115
|
+
VdspArrayParam _d;
|
|
1116
|
+
VdspArrayParam _e;
|
|
1117
|
+
|
|
1118
|
+
array_param(&_a, a, a_offset, a_stride);
|
|
1119
|
+
array_param(&_b, b, b_offset, b_stride);
|
|
1120
|
+
array_param(&_c, c, c_offset, c_stride);
|
|
1121
|
+
array_param(&_d, d, d_offset, d_stride);
|
|
1122
|
+
array_param(&_e, e, e_offset, e_stride);
|
|
1123
|
+
|
|
1124
|
+
vDSP_Stride _n = NUM2LONG(n);
|
|
1125
|
+
|
|
1126
|
+
vDSP_vsbsbmD(
|
|
1127
|
+
_a.res0->v.d+_a.offset, _a.stride,
|
|
1128
|
+
_b.res0->v.d+_b.offset, _b.stride,
|
|
1129
|
+
_c.res0->v.d+_c.offset, _c.stride,
|
|
1130
|
+
_d.res0->v.d+_d.offset, _d.stride,
|
|
1131
|
+
_e.res0->v.d+_e.offset, _e.stride,
|
|
1132
|
+
_n);
|
|
711
1133
|
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
vDSP_Stride _c_stride = FIX2LONG(c_stride);
|
|
715
|
-
vDSP_Stride _d_stride = FIX2LONG(d_stride);
|
|
716
|
-
vDSP_Stride _e_stride = FIX2LONG(e_stride);
|
|
717
|
-
vDSP_Stride _n = FIX2LONG(n);
|
|
1134
|
+
return e;
|
|
1135
|
+
}
|
|
718
1136
|
|
|
719
|
-
|
|
1137
|
+
// e[i] = (a[i] + b[i]) * (c[i] + d[i])
|
|
1138
|
+
VALUE rb_double_vasbm(int argc, VALUE *argv, VALUE cls)
|
|
1139
|
+
{
|
|
1140
|
+
if (argc!=16) {
|
|
1141
|
+
rb_raise(rb_eArgError, "wrong number of arguments (given %d, expected 16)", argc);
|
|
1142
|
+
}
|
|
1143
|
+
VALUE a = argv[0];
|
|
1144
|
+
VALUE a_offset = argv[1];
|
|
1145
|
+
VALUE a_stride = argv[2];
|
|
1146
|
+
VALUE b = argv[3];
|
|
1147
|
+
VALUE b_offset = argv[4];
|
|
1148
|
+
VALUE b_stride = argv[5];
|
|
1149
|
+
VALUE c = argv[6];
|
|
1150
|
+
VALUE c_offset = argv[7];
|
|
1151
|
+
VALUE c_stride = argv[8];
|
|
1152
|
+
VALUE d = argv[9];
|
|
1153
|
+
VALUE d_offset = argv[10];
|
|
1154
|
+
VALUE d_stride = argv[11];
|
|
1155
|
+
VALUE e = argv[12];
|
|
1156
|
+
VALUE e_offset = argv[13];
|
|
1157
|
+
VALUE e_stride = argv[14];
|
|
1158
|
+
VALUE n = argv[15];
|
|
1159
|
+
|
|
1160
|
+
VdspArrayParam _a;
|
|
1161
|
+
VdspArrayParam _b;
|
|
1162
|
+
VdspArrayParam _c;
|
|
1163
|
+
VdspArrayParam _d;
|
|
1164
|
+
VdspArrayParam _e;
|
|
1165
|
+
|
|
1166
|
+
array_param(&_a, a, a_offset, a_stride);
|
|
1167
|
+
array_param(&_b, b, b_offset, b_stride);
|
|
1168
|
+
array_param(&_c, c, c_offset, c_stride);
|
|
1169
|
+
array_param(&_d, d, d_offset, d_stride);
|
|
1170
|
+
array_param(&_e, e, e_offset, e_stride);
|
|
1171
|
+
|
|
1172
|
+
vDSP_Stride _n = NUM2LONG(n);
|
|
1173
|
+
|
|
1174
|
+
vDSP_vasbmD(
|
|
1175
|
+
_a.res0->v.d+_a.offset, _a.stride,
|
|
1176
|
+
_b.res0->v.d+_b.offset, _b.stride,
|
|
1177
|
+
_c.res0->v.d+_c.offset, _c.stride,
|
|
1178
|
+
_d.res0->v.d+_d.offset, _d.stride,
|
|
1179
|
+
_e.res0->v.d+_e.offset, _e.stride,
|
|
1180
|
+
_n);
|
|
720
1181
|
|
|
721
1182
|
return e;
|
|
722
1183
|
}
|
|
723
1184
|
|
|
724
|
-
//
|
|
725
|
-
|
|
1185
|
+
// Vector Generation
|
|
1186
|
+
|
|
1187
|
+
VALUE rb_double_vramp(
|
|
1188
|
+
VALUE cls,
|
|
1189
|
+
VALUE a,
|
|
1190
|
+
VALUE b,
|
|
1191
|
+
VALUE c, VALUE c_offset, VALUE c_stride,
|
|
1192
|
+
VALUE n)
|
|
1193
|
+
{
|
|
1194
|
+
VdspArrayParam _c;
|
|
1195
|
+
|
|
1196
|
+
double _a = NUM2DBL(a);
|
|
1197
|
+
double _b = NUM2DBL(b);
|
|
1198
|
+
array_param(&_c, c, c_offset, c_stride);
|
|
1199
|
+
|
|
1200
|
+
vDSP_Stride _n = NUM2LONG(n);
|
|
1201
|
+
|
|
1202
|
+
vDSP_vrampD(
|
|
1203
|
+
&_a,
|
|
1204
|
+
&_b,
|
|
1205
|
+
_c.res0->v.d+_c.offset, _c.stride,
|
|
1206
|
+
_n);
|
|
1207
|
+
|
|
1208
|
+
return c;
|
|
1209
|
+
}
|
|
1210
|
+
|
|
1211
|
+
VALUE rb_double_vgen(
|
|
1212
|
+
VALUE cls,
|
|
1213
|
+
VALUE a,
|
|
1214
|
+
VALUE b,
|
|
1215
|
+
VALUE c, VALUE c_offset, VALUE c_stride,
|
|
1216
|
+
VALUE n)
|
|
1217
|
+
{
|
|
1218
|
+
VdspArrayParam _c;
|
|
1219
|
+
|
|
1220
|
+
double _a = NUM2DBL(a);
|
|
1221
|
+
double _b = NUM2DBL(b);
|
|
1222
|
+
array_param(&_c, c, c_offset, c_stride);
|
|
1223
|
+
|
|
1224
|
+
vDSP_Stride _n = NUM2LONG(n);
|
|
1225
|
+
|
|
1226
|
+
vDSP_vgenD(
|
|
1227
|
+
&_a,
|
|
1228
|
+
&_b,
|
|
1229
|
+
_c.res0->v.d+_c.offset, _c.stride,
|
|
1230
|
+
_n);
|
|
1231
|
+
|
|
1232
|
+
return c;
|
|
1233
|
+
}
|
|
1234
|
+
|
|
1235
|
+
VALUE rb_double_vrampmul(
|
|
1236
|
+
VALUE cls,
|
|
1237
|
+
VALUE i, VALUE i_offset, VALUE i_stride,
|
|
1238
|
+
VALUE start,
|
|
1239
|
+
VALUE step,
|
|
1240
|
+
VALUE o, VALUE o_offset, VALUE o_stride,
|
|
1241
|
+
VALUE n)
|
|
1242
|
+
{
|
|
1243
|
+
VdspArrayParam _i;
|
|
1244
|
+
VdspArrayParam _o;
|
|
1245
|
+
|
|
1246
|
+
array_param(&_i, i, i_offset, i_stride);
|
|
1247
|
+
double _start = NUM2DBL(start);
|
|
1248
|
+
double _step = NUM2DBL(step);
|
|
1249
|
+
array_param(&_o, o, o_offset, o_stride);
|
|
1250
|
+
|
|
1251
|
+
vDSP_Stride _n = NUM2LONG(n);
|
|
1252
|
+
|
|
1253
|
+
vDSP_vrampmulD(
|
|
1254
|
+
_i.res0->v.d+_i.offset, _i.stride,
|
|
1255
|
+
&_start,
|
|
1256
|
+
&_step,
|
|
1257
|
+
_o.res0->v.d+_o.offset, _o.stride,
|
|
1258
|
+
_n
|
|
1259
|
+
);
|
|
1260
|
+
|
|
1261
|
+
return o;
|
|
1262
|
+
}
|
|
1263
|
+
|
|
1264
|
+
VALUE rb_double_vrampmul2(
|
|
1265
|
+
VALUE cls,
|
|
1266
|
+
VALUE i0, VALUE i1, VALUE i_offset, VALUE i_stride,
|
|
1267
|
+
VALUE start,
|
|
1268
|
+
VALUE step,
|
|
1269
|
+
VALUE o0, VALUE o1, VALUE o_offset, VALUE o_stride,
|
|
1270
|
+
VALUE n)
|
|
1271
|
+
{
|
|
1272
|
+
VdspArrayParam _i;
|
|
1273
|
+
VdspArrayParam _o;
|
|
1274
|
+
|
|
1275
|
+
array_param2(&_i, i0, i1, i_offset, i_stride);
|
|
1276
|
+
double _start = NUM2DBL(start);
|
|
1277
|
+
double _step = NUM2DBL(step);
|
|
1278
|
+
array_param2(&_o, o0, o1, o_offset, o_stride);
|
|
1279
|
+
|
|
1280
|
+
vDSP_Stride _n = NUM2LONG(n);
|
|
1281
|
+
|
|
1282
|
+
vDSP_vrampmul2D(
|
|
1283
|
+
_i.res0->v.d+_i.offset, _i.res1->v.d+_i.offset, _i.stride,
|
|
1284
|
+
&_start,
|
|
1285
|
+
&_step,
|
|
1286
|
+
_o.res0->v.d+_o.offset, _o.res1->v.d+_o.offset, _o.stride,
|
|
1287
|
+
_n
|
|
1288
|
+
);
|
|
1289
|
+
|
|
1290
|
+
return rb_assoc_new(o0, o1);
|
|
1291
|
+
}
|
|
1292
|
+
|
|
1293
|
+
VALUE rb_double_vrampmuladd(
|
|
1294
|
+
VALUE cls,
|
|
1295
|
+
VALUE i, VALUE i_offset, VALUE i_stride,
|
|
1296
|
+
VALUE start,
|
|
1297
|
+
VALUE step,
|
|
1298
|
+
VALUE o, VALUE o_offset, VALUE o_stride,
|
|
1299
|
+
VALUE n)
|
|
1300
|
+
{
|
|
1301
|
+
VdspArrayParam _i;
|
|
1302
|
+
VdspArrayParam _o;
|
|
1303
|
+
|
|
1304
|
+
array_param(&_i, i, i_offset, i_stride);
|
|
1305
|
+
double _start = NUM2DBL(start);
|
|
1306
|
+
double _step = NUM2DBL(step);
|
|
1307
|
+
array_param(&_o, o, o_offset, o_stride);
|
|
1308
|
+
|
|
1309
|
+
vDSP_Stride _n = NUM2LONG(n);
|
|
1310
|
+
|
|
1311
|
+
vDSP_vrampmuladdD(
|
|
1312
|
+
_i.res0->v.d+_i.offset, _i.stride,
|
|
1313
|
+
&_start,
|
|
1314
|
+
&_step,
|
|
1315
|
+
_o.res0->v.d+_o.offset, _o.stride,
|
|
1316
|
+
_n
|
|
1317
|
+
);
|
|
1318
|
+
|
|
1319
|
+
return o;
|
|
1320
|
+
}
|
|
1321
|
+
|
|
1322
|
+
VALUE rb_double_vrampmuladd2(
|
|
1323
|
+
VALUE cls,
|
|
1324
|
+
VALUE i0, VALUE i1, VALUE i_offset, VALUE i_stride,
|
|
1325
|
+
VALUE start,
|
|
1326
|
+
VALUE step,
|
|
1327
|
+
VALUE o0, VALUE o1, VALUE o_offset, VALUE o_stride,
|
|
1328
|
+
VALUE n)
|
|
1329
|
+
{
|
|
1330
|
+
VdspArrayParam _i;
|
|
1331
|
+
VdspArrayParam _o;
|
|
1332
|
+
|
|
1333
|
+
array_param2(&_i, i0, i1, i_offset, i_stride);
|
|
1334
|
+
double _start = NUM2DBL(start);
|
|
1335
|
+
double _step = NUM2DBL(step);
|
|
1336
|
+
array_param2(&_o, o0, o1, o_offset, o_stride);
|
|
1337
|
+
|
|
1338
|
+
vDSP_Stride _n = NUM2LONG(n);
|
|
1339
|
+
|
|
1340
|
+
vDSP_vrampmuladd2D(
|
|
1341
|
+
_i.res0->v.d+_i.offset, _i.res1->v.d+_i.offset, _i.stride,
|
|
1342
|
+
&_start,
|
|
1343
|
+
&_step,
|
|
1344
|
+
_o.res0->v.d+_o.offset, _o.res1->v.d+_o.offset, _o.stride,
|
|
1345
|
+
_n
|
|
1346
|
+
);
|
|
1347
|
+
|
|
1348
|
+
return rb_assoc_new(o0, o1);
|
|
1349
|
+
}
|
|
1350
|
+
|
|
1351
|
+
VALUE rb_double_vgenp(
|
|
1352
|
+
VALUE cls,
|
|
1353
|
+
VALUE a, VALUE a_offset, VALUE a_stride,
|
|
1354
|
+
VALUE b, VALUE b_offset, VALUE b_stride,
|
|
1355
|
+
VALUE c, VALUE c_offset, VALUE c_stride,
|
|
1356
|
+
VALUE n,
|
|
1357
|
+
VALUE m)
|
|
726
1358
|
{
|
|
727
|
-
|
|
728
|
-
|
|
1359
|
+
VdspArrayParam _a;
|
|
1360
|
+
VdspArrayParam _b;
|
|
1361
|
+
VdspArrayParam _c;
|
|
1362
|
+
|
|
1363
|
+
array_param(&_a, a, a_offset, a_stride);
|
|
1364
|
+
array_param(&_b, b, b_offset, b_stride);
|
|
1365
|
+
array_param(&_c, c, c_offset, c_stride);
|
|
1366
|
+
|
|
1367
|
+
vDSP_Stride _n = NUM2LONG(n);
|
|
1368
|
+
vDSP_Stride _m = NUM2LONG(m);
|
|
1369
|
+
|
|
1370
|
+
vDSP_vgenpD(
|
|
1371
|
+
_a.res0->v.d+_a.offset, _a.stride,
|
|
1372
|
+
_b.res0->v.d+_b.offset, _b.stride,
|
|
1373
|
+
_c.res0->v.d+_c.offset, _c.stride,
|
|
1374
|
+
_n,
|
|
1375
|
+
_m
|
|
1376
|
+
);
|
|
1377
|
+
|
|
1378
|
+
return c;
|
|
1379
|
+
}
|
|
1380
|
+
|
|
1381
|
+
VALUE rb_double_vtabi(
|
|
1382
|
+
VALUE cls,
|
|
1383
|
+
VALUE a, VALUE a_offset, VALUE a_stride,
|
|
1384
|
+
VALUE s1,
|
|
1385
|
+
VALUE s2,
|
|
1386
|
+
VALUE c,
|
|
1387
|
+
VALUE m,
|
|
1388
|
+
VALUE d, VALUE d_offset, VALUE d_stride,
|
|
1389
|
+
VALUE n)
|
|
1390
|
+
{
|
|
1391
|
+
VdspArrayParam _a;
|
|
1392
|
+
VdspArrayParam _d;
|
|
1393
|
+
|
|
1394
|
+
array_param(&_a, a, a_offset, a_stride);
|
|
1395
|
+
double _s1 = NUM2DBL(s1);
|
|
1396
|
+
double _s2 = NUM2DBL(s2);
|
|
729
1397
|
VdspArrayNativeResource *_c = get_vdsp_array_native_resource(c);
|
|
730
|
-
VdspArrayNativeResource *_d = get_vdsp_array_native_resource(d);
|
|
731
|
-
VdspArrayNativeResource *_e = get_vdsp_array_native_resource(e);
|
|
732
1398
|
|
|
733
|
-
vDSP_Stride
|
|
734
|
-
vDSP_Stride
|
|
735
|
-
vDSP_Stride _c_stride = FIX2LONG(c_stride);
|
|
736
|
-
vDSP_Stride _d_stride = FIX2LONG(d_stride);
|
|
737
|
-
vDSP_Stride _e_stride = FIX2LONG(e_stride);
|
|
738
|
-
vDSP_Stride _n = FIX2LONG(n);
|
|
1399
|
+
vDSP_Stride _m = NUM2LONG(m);
|
|
1400
|
+
vDSP_Stride _n = NUM2LONG(n);
|
|
739
1401
|
|
|
740
|
-
|
|
1402
|
+
array_param(&_d, d, d_offset, d_stride);
|
|
741
1403
|
|
|
742
|
-
|
|
1404
|
+
vDSP_vtabiD(
|
|
1405
|
+
_a.res0->v.d+_a.offset, _a.stride,
|
|
1406
|
+
&_s1,
|
|
1407
|
+
&_s2,
|
|
1408
|
+
_c->v.d,
|
|
1409
|
+
_m,
|
|
1410
|
+
_d.res0->v.d+_d.offset, _d.stride,
|
|
1411
|
+
_n
|
|
1412
|
+
);
|
|
1413
|
+
|
|
1414
|
+
return d;
|
|
743
1415
|
}
|
|
744
1416
|
|
|
745
|
-
|
|
746
|
-
VALUE rb_double_vasbm(VALUE cls, VALUE a, VALUE a_stride, VALUE b, VALUE b_stride, VALUE c, VALUE c_stride, VALUE d, VALUE d_stride, VALUE e, VALUE e_stride, VALUE n)
|
|
1417
|
+
VALUE rb_double_blkman_window(VALUE cls, VALUE c, VALUE n, VALUE flag)
|
|
747
1418
|
{
|
|
748
|
-
VdspArrayNativeResource *_a = get_vdsp_array_native_resource(a);
|
|
749
|
-
VdspArrayNativeResource *_b = get_vdsp_array_native_resource(b);
|
|
750
1419
|
VdspArrayNativeResource *_c = get_vdsp_array_native_resource(c);
|
|
751
|
-
|
|
752
|
-
|
|
1420
|
+
vDSP_Stride _n = NUM2LONG(n);
|
|
1421
|
+
int _flag = (int)NUM2LONG(flag);
|
|
753
1422
|
|
|
754
|
-
|
|
755
|
-
vDSP_Stride _b_stride = FIX2LONG(b_stride);
|
|
756
|
-
vDSP_Stride _c_stride = FIX2LONG(c_stride);
|
|
757
|
-
vDSP_Stride _d_stride = FIX2LONG(d_stride);
|
|
758
|
-
vDSP_Stride _e_stride = FIX2LONG(e_stride);
|
|
759
|
-
vDSP_Stride _n = FIX2LONG(n);
|
|
1423
|
+
vDSP_blkman_windowD(_c->v.d, _n, _flag);
|
|
760
1424
|
|
|
761
|
-
|
|
1425
|
+
return c;
|
|
1426
|
+
}
|
|
762
1427
|
|
|
763
|
-
|
|
1428
|
+
VALUE rb_double_hamm_window(VALUE cls, VALUE c, VALUE n, VALUE flag)
|
|
1429
|
+
{
|
|
1430
|
+
VdspArrayNativeResource *_c = get_vdsp_array_native_resource(c);
|
|
1431
|
+
vDSP_Stride _n = NUM2LONG(n);
|
|
1432
|
+
int _flag = (int)NUM2LONG(flag);
|
|
1433
|
+
|
|
1434
|
+
vDSP_hamm_windowD(_c->v.d, _n, _flag);
|
|
1435
|
+
|
|
1436
|
+
return c;
|
|
1437
|
+
}
|
|
1438
|
+
|
|
1439
|
+
VALUE rb_double_hann_window(VALUE cls, VALUE c, VALUE n, VALUE flag)
|
|
1440
|
+
{
|
|
1441
|
+
VdspArrayNativeResource *_c = get_vdsp_array_native_resource(c);
|
|
1442
|
+
vDSP_Stride _n = NUM2LONG(n);
|
|
1443
|
+
int _flag = (int)NUM2LONG(flag);
|
|
1444
|
+
|
|
1445
|
+
vDSP_hann_windowD(_c->v.d, _n, _flag);
|
|
1446
|
+
|
|
1447
|
+
return c;
|
|
764
1448
|
}
|
|
765
1449
|
|
|
766
1450
|
|
|
@@ -770,6 +1454,8 @@ void Init_vdsp()
|
|
|
770
1454
|
{
|
|
771
1455
|
// Vdsp
|
|
772
1456
|
rb_mVdsp = rb_define_module("Vdsp");
|
|
1457
|
+
rb_define_const(rb_mVdsp, "HALF_WINDOW", LONG2NUM(vDSP_HALF_WINDOW));
|
|
1458
|
+
rb_define_const(rb_mVdsp, "FULL_WINDOW", LONG2NUM(0));
|
|
773
1459
|
|
|
774
1460
|
// Vdsp::Scalar
|
|
775
1461
|
rb_mVdspScalar = rb_define_module_under(rb_mVdsp, "Scalar");
|
|
@@ -802,31 +1488,49 @@ void Init_vdsp()
|
|
|
802
1488
|
rb_define_method(rb_cDoubleArray, "[]=", rb_double_array_aset, 2);
|
|
803
1489
|
rb_define_method(rb_cDoubleArray, "to_a", rb_double_array_get_values, 0);
|
|
804
1490
|
rb_define_method(rb_cDoubleArray, "coerce", rb_double_array_coerce, 1);
|
|
1491
|
+
rb_define_singleton_method(rb_cDoubleArray, "vramp", rb_double_array_vramp, 3);
|
|
1492
|
+
rb_define_singleton_method(rb_cDoubleArray, "vgen", rb_double_array_vgen, 3);
|
|
1493
|
+
rb_define_singleton_method(rb_cDoubleArray, "blkman_window", rb_double_array_blkman_window, -1);
|
|
1494
|
+
rb_define_singleton_method(rb_cDoubleArray, "hamm_window", rb_double_array_hamm_window, -1);
|
|
1495
|
+
rb_define_singleton_method(rb_cDoubleArray, "hann_window", rb_double_array_hann_window, -1);
|
|
805
1496
|
|
|
806
|
-
// Vdsp::
|
|
807
|
-
|
|
1497
|
+
// Vdsp::UnsafeDouble
|
|
1498
|
+
rb_mUnsafeDouble = rb_define_module_under(rb_mVdsp, "UnsafeDouble");
|
|
808
1499
|
|
|
809
1500
|
// Vector-based Arithmetic
|
|
810
|
-
rb_define_singleton_method(
|
|
811
|
-
rb_define_singleton_method(
|
|
812
|
-
rb_define_singleton_method(
|
|
813
|
-
rb_define_singleton_method(
|
|
814
|
-
rb_define_singleton_method(
|
|
815
|
-
rb_define_singleton_method(
|
|
816
|
-
rb_define_singleton_method(
|
|
817
|
-
rb_define_singleton_method(
|
|
818
|
-
rb_define_singleton_method(
|
|
819
|
-
rb_define_singleton_method(
|
|
820
|
-
rb_define_singleton_method(
|
|
821
|
-
rb_define_singleton_method(
|
|
822
|
-
rb_define_singleton_method(
|
|
823
|
-
rb_define_singleton_method(
|
|
824
|
-
rb_define_singleton_method(
|
|
825
|
-
rb_define_singleton_method(
|
|
826
|
-
rb_define_singleton_method(
|
|
827
|
-
rb_define_singleton_method(
|
|
828
|
-
rb_define_singleton_method(
|
|
829
|
-
rb_define_singleton_method(
|
|
830
|
-
rb_define_singleton_method(
|
|
831
|
-
rb_define_singleton_method(
|
|
1501
|
+
rb_define_singleton_method(rb_mUnsafeDouble, "vsadd", rb_double_vsadd, 8);
|
|
1502
|
+
rb_define_singleton_method(rb_mUnsafeDouble, "vadd", rb_double_vadd, 10);
|
|
1503
|
+
rb_define_singleton_method(rb_mUnsafeDouble, "vsub", rb_double_vsub, 10);
|
|
1504
|
+
rb_define_singleton_method(rb_mUnsafeDouble, "vsmul", rb_double_vsmul, 8);
|
|
1505
|
+
rb_define_singleton_method(rb_mUnsafeDouble, "vmul", rb_double_vmul, 10);
|
|
1506
|
+
rb_define_singleton_method(rb_mUnsafeDouble, "vsdiv", rb_double_vsdiv, 8);
|
|
1507
|
+
rb_define_singleton_method(rb_mUnsafeDouble, "svdiv", rb_double_svdiv, 8);
|
|
1508
|
+
rb_define_singleton_method(rb_mUnsafeDouble, "vaddsub", rb_double_vaddsub, 13);
|
|
1509
|
+
rb_define_singleton_method(rb_mUnsafeDouble, "vdiv", rb_double_vdiv, 10);
|
|
1510
|
+
rb_define_singleton_method(rb_mUnsafeDouble, "vasm", rb_double_vasm, 11);
|
|
1511
|
+
rb_define_singleton_method(rb_mUnsafeDouble, "vam", rb_double_vam, 13);
|
|
1512
|
+
rb_define_singleton_method(rb_mUnsafeDouble, "vsbsm", rb_double_vsbsm, 11);
|
|
1513
|
+
rb_define_singleton_method(rb_mUnsafeDouble, "vsbm", rb_double_vsbm, 13);
|
|
1514
|
+
rb_define_singleton_method(rb_mUnsafeDouble, "vmsa", rb_double_vmsa, 11);
|
|
1515
|
+
rb_define_singleton_method(rb_mUnsafeDouble, "vsma", rb_double_vsma, 11);
|
|
1516
|
+
rb_define_singleton_method(rb_mUnsafeDouble, "vma", rb_double_vma, 13);
|
|
1517
|
+
rb_define_singleton_method(rb_mUnsafeDouble, "vmsb", rb_double_vmsb, 13);
|
|
1518
|
+
rb_define_singleton_method(rb_mUnsafeDouble, "vsmsma", rb_double_vsmsma, 12);
|
|
1519
|
+
rb_define_singleton_method(rb_mUnsafeDouble, "vaam", rb_double_vaam, -1);
|
|
1520
|
+
rb_define_singleton_method(rb_mUnsafeDouble, "vmmsb", rb_double_vmmsb, -1);
|
|
1521
|
+
rb_define_singleton_method(rb_mUnsafeDouble, "vsbsbm", rb_double_vsbsbm, -1);
|
|
1522
|
+
rb_define_singleton_method(rb_mUnsafeDouble, "vasbm", rb_double_vasbm, -1);
|
|
1523
|
+
|
|
1524
|
+
// Vector Generation
|
|
1525
|
+
rb_define_singleton_method(rb_mUnsafeDouble, "vramp", rb_double_vramp, 6);
|
|
1526
|
+
rb_define_singleton_method(rb_mUnsafeDouble, "vgen", rb_double_vgen, 6);
|
|
1527
|
+
rb_define_singleton_method(rb_mUnsafeDouble, "vrampmul", rb_double_vrampmul, 9);
|
|
1528
|
+
rb_define_singleton_method(rb_mUnsafeDouble, "vrampmul2", rb_double_vrampmul2, 11);
|
|
1529
|
+
rb_define_singleton_method(rb_mUnsafeDouble, "vrampmuladd", rb_double_vrampmuladd, 9);
|
|
1530
|
+
rb_define_singleton_method(rb_mUnsafeDouble, "vrampmuladd2", rb_double_vrampmuladd2, 11);
|
|
1531
|
+
rb_define_singleton_method(rb_mUnsafeDouble, "vgenp", rb_double_vgenp, 11);
|
|
1532
|
+
rb_define_singleton_method(rb_mUnsafeDouble, "vtabi", rb_double_vtabi, 11);
|
|
1533
|
+
rb_define_singleton_method(rb_mUnsafeDouble, "blkman_window", rb_double_blkman_window, 3);
|
|
1534
|
+
rb_define_singleton_method(rb_mUnsafeDouble, "hamm_window", rb_double_hamm_window, 3);
|
|
1535
|
+
rb_define_singleton_method(rb_mUnsafeDouble, "hann_window", rb_double_hann_window, 3);
|
|
832
1536
|
}
|