~ubuntu-branches/ubuntu/edgy/gimp/edgy

« back to all changes in this revision

Viewing changes to app/composite/gimp-composite-sse2.c

  • Committer: Bazaar Package Importer
  • Author(s): Daniel Holbach
  • Date: 2005-12-09 19:44:52 UTC
  • Revision ID: james.westby@ubuntu.com-20051209194452-u66thmzs0qj3v31a
Tags: 2.2.9-7ubuntu1
* Resynchronized with Debian:
  - app/dialogs/user-install-dialog.c:
    - skip the user installation dialog.
  - data/misc/gimp.desktop.in.in:
    - ship some translations.

Show diffs side-by-side

added added

removed removed

Lines of Context:
99
99
                "\tmovq      %1,%%mm0"
100
100
                : /* empty */
101
101
                : "m" (*rgba8_alpha_mask_128), "m" (*rgba8_alpha_mask_64)
102
 
                : "%xmm0", "%mm0");
 
102
#ifdef __MMX__
 
103
                : "%mm0"
 
104
#ifdef __SSE__
 
105
                , "%xmm0"
 
106
#endif
 
107
#endif
 
108
                );
103
109
 
104
110
  for (; n_pixels >= 4; n_pixels -= 4)
105
111
    {
116
122
                    "\tmovdqu  %%xmm1,%0\n"
117
123
                    : "=m" (*D)
118
124
                    : "m" (*A), "m" (*B)
119
 
                    : "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5", "%xmm6", "%xmm7");
 
125
#ifdef __SSE__
 
126
                    : "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5", "%xmm6", "%xmm7"
 
127
#endif
 
128
                    );
120
129
      A++;
121
130
      B++;
122
131
      D++;
140
149
                    "\tmovq    %%mm1,%0\n"
141
150
                    : "=m" (*d)
142
151
                    : "m" (*a), "m" (*b)
143
 
                    : "%mm0", "%mm1", "%mm2", "%mm3", "%mm4", "%mm5", "%mm6", "%mm7");
 
152
#ifdef __MMX__
 
153
                    : "%mm0", "%mm1", "%mm2", "%mm3", "%mm4", "%mm5", "%mm6", "%mm7"
 
154
#endif
 
155
                    );
144
156
      a++;
145
157
      b++;
146
158
      d++;
160
172
                    "\tmovd    %%mm1,%0\n"
161
173
                    : "=m" (*d)
162
174
                    : "m" (*a), "m" (*b)
163
 
                    : "%mm0", "%mm1", "%mm2", "%mm3", "%mm4", "%mm5", "%mm6", "%mm7");
 
175
#ifdef __MMX__
 
176
                    : "%mm0", "%mm1", "%mm2", "%mm3", "%mm4", "%mm5", "%mm6", "%mm7"
 
177
#endif
 
178
                    );
164
179
    }
165
180
 
166
181
  asm("emms");
194
209
                    "\tmovdqu      %%xmm2,%0\n"
195
210
                    : "=m" (*D)
196
211
                    : "m" (*A), "m" (*B)
197
 
                    : "%xmm1", "%xmm2", "%xmm3", "%xmm4");
 
212
#ifdef __SSE__
 
213
                    : "%xmm1", "%xmm2", "%xmm3", "%xmm4"
 
214
#endif
 
215
                    );
198
216
      A++;
199
217
      B++;
200
218
      D++;
211
229
                    "\tmovq    %%mm2, %0\n"
212
230
                    : "=m" (*d)
213
231
                    : "m" (*a), "m" (*b)
214
 
                    : "%mm1", "%mm2", "%mm3", "%mm4");
 
232
#ifdef __MMX__
 
233
                    : "%mm1", "%mm2", "%mm3", "%mm4"
 
234
#endif
 
235
                    );
215
236
      a++;
216
237
      b++;
217
238
      d++;
225
246
                    "\tmovd    %%mm2, %0\n"
226
247
                    : "=m" (*d)
227
248
                    : "m" (*a), "m" (*b)
228
 
                    : "%mm2", "%mm3", "%mm4");
 
249
#ifdef __MMX__
 
250
                    : "%mm2", "%mm3", "%mm4"
 
251
#endif
 
252
                    );
229
253
    }
230
254
 
231
255
  asm("emms");
246
270
                "\tmovdqu %1,%%xmm0"
247
271
                :               /*  */
248
272
                : "m" (*rgba8_alpha_mask_64), "m" (*rgba8_alpha_mask_128)
249
 
                : "%mm0", "%xmm0");
 
273
#ifdef __MMX__
 
274
                : "%mm0"
 
275
#ifdef __SSE__
 
276
                , "%xmm0"
 
277
#endif
 
278
#endif
 
279
                );
250
280
 
251
281
  for (; n_pixels >= 4; n_pixels -= 4)
252
282
    {
265
295
                    "\tmovdqu    %%xmm1,%0\n"
266
296
                    : "=m" (*D)
267
297
                    : "m" (*A), "m" (*B)
268
 
                    : "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5");
 
298
#ifdef __SSE__
 
299
                    : "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5"
 
300
#endif
 
301
                    );
269
302
      A++;
270
303
      B++;
271
304
      D++;
292
325
                    "\tmovq    %%mm1, %0\n"
293
326
                    : "=m" (*d)
294
327
                    : "m" (*a), "m" (*b)
295
 
                    : "%mm1", "%mm2", "%mm3", "%mm4", "%mm5");
 
328
#ifdef __MMX__
 
329
                    : "%mm1", "%mm2", "%mm3", "%mm4", "%mm5"
 
330
#endif
 
331
                    );
296
332
      a++;
297
333
      b++;
298
334
      d++;
315
351
                    "\tmovd    %%mm1, %0\n"
316
352
                    : "=m" (*d)
317
353
                    : "m" (*a), "m" (*b)
318
 
                    : "%mm1", "%mm2", "%mm3", "%mm4", "%mm5");
 
354
#ifdef __MMX__
 
355
                    : "%mm1", "%mm2", "%mm3", "%mm4", "%mm5"
 
356
#endif
 
357
                    );
319
358
    }
320
359
 
321
360
  asm("emms");
365
404
                    "\tmovdqu    %%xmm7,%0\n"
366
405
                    : "=m" (*op.D)
367
406
                    : "m" (*op.A), "m" (*op.B), "m" (*rgba8_w256_128), "m" (*rgba8_alpha_mask_128)
368
 
                    : "%eax", "%ecx", "%edx", "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5", "%xmm6", "%xmm7");
 
407
                    : "%eax", "%ecx", "%edx"
 
408
#ifdef __SSE__
 
409
                    , "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5", "%xmm6", "%xmm7"
 
410
#endif
 
411
                    );
369
412
      op.A += 16;
370
413
      op.B += 16;
371
414
      op.D += 16;
408
451
                    "\tmovq      %%mm7,%0\n"
409
452
                    : (*op.D)
410
453
                    : "m" (*op.A), "m" (*op.B), "m" (*rgba8_w256_64), "m" (*rgba8_alpha_mask_64)
411
 
                    : "%eax", "%ecx", "%edx", "%mm0", "%mm1", "%mm2", "%mm3", "%mm4", "%mm5", "%mm6", "%mm7");
 
454
                    : "%eax", "%ecx", "%edx"
 
455
#ifdef __MMX__
 
456
                    , "%mm0", "%mm1", "%mm2", "%mm3", "%mm4", "%mm5", "%mm6", "%mm7"
 
457
#endif
 
458
                    );
412
459
      op.A += 8;
413
460
      op.B += 8;
414
461
      op.D += 8;
451
498
                    "\tmovd      %%mm7,%0\n"
452
499
                    : "=m" (*op.D)
453
500
                    : "m" (*op.A), "m" (*op.B), "m" (*rgba8_w256_64), "m" (*rgba8_alpha_mask_64)
454
 
                    : "%eax", "%ecx", "%edx", "%mm1", "%mm2", "%mm3", "%mm4", "%mm5");
 
501
                    : "%eax", "%ecx", "%edx"
 
502
#ifdef __MMX__
 
503
                    , "%mm1", "%mm2", "%mm3", "%mm4", "%mm5"
 
504
#endif
 
505
                    );
455
506
    }
456
507
 
457
508
  asm("emms");
477
528
                "\tmovdqu     %3,%%xmm7\n"
478
529
                : /* empty */
479
530
                : "m" (*rgba8_alpha_mask_64), "m" (*rgba8_w128_64), "m" (*rgba8_alpha_mask_128), "m" (*rgba8_w128_128)
480
 
                : "%mm0", "%mm6", "%mm7", "%xmm0", "%xmm6", "%xmm7");
 
531
#ifdef __MMX__
 
532
                : "%mm0", "%mm6", "%mm7"
 
533
#ifdef __SSE__
 
534
                , "%xmm0", "%xmm6", "%xmm7"
 
535
#endif
 
536
#endif
 
537
                );
481
538
 
482
539
  for (; n_pixels >= 4; n_pixels -= 4)
483
540
    {
508
565
                    "\tmovdqu    %%xmm1,%0\n"
509
566
                    : "=m" (*D)
510
567
                    : "m" (*A), "m" (*B)
511
 
                    : "%xmm1", "%xmm2", "%xmm3", "%xmm4");
 
568
#ifdef __SSE__
 
569
                    : "%xmm1", "%xmm2", "%xmm3", "%xmm4"
 
570
#endif
 
571
                    );
512
572
      A++;
513
573
      B++;
514
574
      D++;
547
607
                    "\tmovq      %%mm1,%0\n"
548
608
                    : "=m" (*d)
549
609
                    : "m" (*a), "m" (*b)
550
 
                    : "%mm1", "%mm2", "%mm3", "%mm4");
 
610
#ifdef __MMX__
 
611
                    : "%mm1", "%mm2", "%mm3", "%mm4"
 
612
#endif
 
613
                    );
551
614
      a++;
552
615
      b++;
553
616
      d++;
572
635
                    "\tmovd      %%mm1, %0\n"
573
636
                    : "=m" (*d)
574
637
                    : "m" (*a), "m" (*b)
575
 
                    : "%mm1", "%mm2", "%mm3", "%mm4");
 
638
#ifdef __MMX__
 
639
                    : "%mm1", "%mm2", "%mm3", "%mm4"
 
640
#endif
 
641
                    );
576
642
    }
577
643
 
578
644
  asm("emms");
589
655
  uint128 *B = (uint128 *) _op->B;
590
656
  gulong n_pixels = _op->n_pixels;
591
657
 
592
 
  asm volatile ("movdqu    %0,%%xmm0"  :  : "m" (*rgba8_alpha_mask_64) : "%xmm0");
 
658
  asm volatile ("movdqu    %0,%%xmm0"
 
659
          :
 
660
          : "m" (*rgba8_alpha_mask_64)
 
661
#ifdef __SSE__
 
662
          : "%xmm0"
 
663
#endif
 
664
          );
593
665
 
594
666
  for (; n_pixels >= 4; n_pixels -= 4)
595
667
    {
605
677
                    "\tmovdqu  %%xmm1, %0\n"
606
678
                    : "=m" (*D)
607
679
                    : "m" (*A), "m" (*B)
608
 
                    : "%xmm1", "%xmm2", "%xmm3", "%xmm4");
 
680
#ifdef __SSE__
 
681
                    : "%xmm1", "%xmm2", "%xmm3", "%xmm4"
 
682
#endif
 
683
                    );
609
684
      A++;
610
685
      B++;
611
686
      D++;
629
704
                    "\tmovq    %%mm1, %0\n"
630
705
                    : "=m" (*d)
631
706
                    : "m" (*a), "m" (*b)
632
 
                    : "%mm1", "%mm2", "%mm3", "%mm4");
 
707
#ifdef __MMX__
 
708
                    : "%mm1", "%mm2", "%mm3", "%mm4"
 
709
#endif
 
710
                    );
633
711
      a++;
634
712
      b++;
635
713
      d++;
649
727
                    "\tmovd    %%mm1, %0\n"
650
728
                    : "=m" (*d)
651
729
                    : "m" (*a), "m" (*b)
652
 
                    : "%mm1", "%mm2", "%mm3", "%mm4");
 
730
#ifdef __MMX__
 
731
                    : "%mm1", "%mm2", "%mm3", "%mm4"
 
732
#endif
 
733
                    );
653
734
    }
654
735
 
655
736
  asm("emms");
670
751
                "\tmovdqu  %1,%%xmm0\n"
671
752
                : /* empty */
672
753
                : "m" (*rgba8_alpha_mask_64), "m" (*rgba8_alpha_mask_128)
673
 
                : "%mm0", "%xmm0");
 
754
#ifdef __MMX__
 
755
                : "%mm0"
 
756
#ifdef __SSE__
 
757
                , "%xmm0"
 
758
#endif
 
759
#endif
 
760
                );
674
761
 
675
762
  for (; n_pixels >= 4; n_pixels -= 4)
676
763
    {
687
774
                    "\tmovdqu   %%xmm1,%0\n"
688
775
                    : "=m" (*D)
689
776
                    : "m" (*A), "m" (*B)
690
 
                    : "%xmm1", "%xmm2", "%xmm3", "%xmm4");
 
777
#ifdef __SSE__
 
778
                    : "%xmm1", "%xmm2", "%xmm3", "%xmm4"
 
779
#endif
 
780
                    );
691
781
      A++;
692
782
      B++;
693
783
      D++;
711
801
                    "\tmovq    %%mm1,%0\n"
712
802
                    : "=m" (*d)
713
803
                    : "m" (*a), "m" (*b)
714
 
                    : "%mm1", "%mm2", "%mm3", "%mm4");
 
804
#ifdef __MMX__
 
805
                    : "%mm1", "%mm2", "%mm3", "%mm4"
 
806
#endif
 
807
                    );
715
808
      a++;
716
809
      b++;
717
810
      d++;
731
824
                    "\tmovd    %%mm1,%0\n"
732
825
                    : "=m" (*d)
733
826
                    : "m" (*a), "m" (*b)
734
 
                    : "%mm1", "%mm2", "%mm3", "%mm4");
 
827
#ifdef __MMX__
 
828
                    : "%mm1", "%mm2", "%mm3", "%mm4"
 
829
#endif
 
830
                    );
735
831
    }
736
832
 
737
833
  asm("emms");
771
867
                      "+m" (op.A[2]), "+m" (op.B[2]),
772
868
                      "+m" (op.A[3]), "+m" (op.B[3])
773
869
                    : /* empty */
 
870
#ifdef __SSE__
774
871
                    : "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5", "%xmm6", "%xmm7"
 
872
#endif
775
873
                    );
776
874
#else
777
875
      asm volatile ("  movdqu      %0,%%xmm0\n"
781
879
                    : "+m" (op.A[0]), "+m" (op.B[0]),
782
880
                      "+m" (op.A[1]), "+m" (op.B[1])
783
881
                    : /* empty */
 
882
#ifdef __SSE__
784
883
                    : "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5", "%xmm6", "%xmm7"
 
884
#endif
785
885
                    );
786
886
 
787
887
      asm volatile ("\tmovdqu      %4,%%xmm4\n"
791
891
                    : "+m" (op.A[2]), "+m" (op.B[2]),
792
892
                      "+m" (op.A[3]), "+m" (op.B[3])
793
893
                    : /* empty */
 
894
#ifdef __SSE__
794
895
                    : "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5", "%xmm6", "%xmm7"
 
896
#endif
795
897
                    );
796
898
 
797
899
      asm volatile ("\tmovdqu      %%xmm0,%1\n"
801
903
                    : "+m" (op.A[0]), "+m" (op.B[0]),
802
904
                      "+m" (op.A[1]), "+m" (op.B[1])
803
905
                    : /* empty */
 
906
#ifdef __SSE__
804
907
                    : "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5", "%xmm6", "%xmm7"
 
908
#endif
805
909
                    );
806
910
 
807
911
      asm volatile ("\tmovdqu      %%xmm4,%5\n"
811
915
                    : "+m" (op.A[2]), "+m" (op.B[2]),
812
916
                      "+m" (op.A[3]), "+m" (op.B[3])
813
917
                    : /* empty */
 
918
#ifdef __SSE__
814
919
                    : "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5", "%xmm6", "%xmm7"
 
920
#endif
815
921
                    );
816
922
#endif
817
923
      op.A += 64;
827
933
                    "\tmovdqu  %%xmm2,%1\n"
828
934
                    : "+m" (*op.A), "+m" (*op.B)
829
935
                    : /* empty */
830
 
                    : "%xmm2", "%xmm3");
 
936
#ifdef __SSE__
 
937
                    : "%xmm2", "%xmm3"
 
938
#endif
 
939
                    );
831
940
      op.A += 16;
832
941
      op.B += 16;
833
942
    }
840
949
                    "\tmovq   %%mm2,%1\n"
841
950
                    : "+m" (*op.A), "+m" (*op.B)
842
951
                    : /* empty */
843
 
                    : "%mm2", "%mm3");
 
952
#ifdef __MMX__
 
953
                    : "%mm2", "%mm3"
 
954
#endif
 
955
                    );
844
956
      op.A += 8;
845
957
      op.B += 8;
846
958
    }
853
965
                    "\tmovd   %%mm2,%1\n"
854
966
                    : "+m" (*op.A), "+m" (*op.B)
855
967
                    : /* empty */
856
 
                    : "%mm1", "%mm2", "%mm3", "%mm4");
 
968
#ifdef __MMX__
 
969
                    : "%mm1", "%mm2", "%mm3", "%mm4"
 
970
#endif
 
971
                    );
857
972
    }
858
973
 
859
974
  asm("emms");