Subversion Repositories Kolibri OS

Rev

Rev 1921 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1921 Rev 2388
Line 1... Line 1...
1
proc blend_rgb
1
proc	xcf._.blend_rgb
Line 2... Line 2...
2
 
2
 
3
        xchg    al,     bh
3
	xchg		al, bh
4
        mov     ah,     bh
4
	mov		ah, bh
5
        neg     ax
5
	neg		ax
Line 15... Line 15...
15
        not     al
15
	not		al
16
        div     bh
16
	div		bh
17
@@:
17
    @@:
Line 18... Line 18...
18
 
18
 
-
 
19
	mov		ah, al
19
        mov     ah,     al
20
 
20
        movd    mm1,    eax
-
 
21
;        pxor    mm0,    mm0        ; already xor'ed in composite function
21
	movd		mm1, eax
22
        punpcklbw   mm1,    mm1
22
	punpcklbw	mm1, mm1
23
        punpcklbw   mm1,    mm0
-
 
Line 24... Line 23...
24
;        punpcklbw   mm3,    mm0
23
	punpcklbw	mm1, mm0
25
 
24
 
26
        movq        mm7,    mm1
25
	movq		mm7, mm1
Line 38... Line 37...
38
 
37
 
39
        ret
38
	ret
Line 40... Line 39...
40
endp
39
endp
Line 41... Line 40...
41
 
40
 
42
 
41
 
43
proc blend_gray
42
proc	xcf._.blend_gray
44
 
43
 
Line 57... Line 56...
57
        not     al
56
	not		al
58
        div     bh
57
	div		bh
59
@@:
58
    @@:
Line 60... Line 59...
60
 
59
 
-
 
60
	mov		ah, al
61
        mov     ah,     al
61
 
62
        movd    mm1,    eax
-
 
63
;        pxor    mm0,    mm0        ; already xor'ed in composite function
62
	movd		mm1, eax
64
        punpcklbw   mm1,    mm1
63
	punpcklbw	mm1, mm1
65
        punpcklbw   mm1,    mm0
-
 
Line 66... Line 64...
66
;        punpcklbw   mm3,    mm0
64
	punpcklbw	mm1, mm0
67
 
65
 
68
        movq        mm7,    mm1
66
	movq		mm7, mm1
Line 80... Line 78...
80
 
78
 
81
        ret
79
	ret
Line 82... Line 80...
82
endp
80
endp
83
 
81
 
84
 
82
 
85
proc merge_32 _copy_width, _copy_height, _img_total_bpl, _bottom_total_bpl
83
proc	xcf._.merge_32 _copy_width, _copy_height, _img_total_bpl, _bottom_total_bpl
86
.rgb_line:
84
  .rgb_line:
87
        mov     ecx,    [_copy_width]
85
	mov		ecx, [_copy_width]
Line 94... Line 92...
94
        shr     eax,    24
92
	shr		eax, 24
95
        shr     ebx,    16
93
	shr		ebx, 16
96
        cmp     al,     bh
94
	cmp		al, bh
97
         jna    @f
95
	jna		@f
98
        mov     al,     bh
96
	mov		al, bh
-
 
97
    @@:
99
@@:     pxor    mm0,    mm0
98
	pxor		mm0, mm0
100
        call    edx
99
	call		edx
101
        call    blend_rgb
100
	call		xcf._.blend_rgb
102
        stosd
101
	stosd
103
        dec     ecx
102
	dec		ecx
104
         jnz    .rgb_pixel
103
	jnz		.rgb_pixel
105
        add     esi,    [_img_total_bpl]
104
	add		esi, [_img_total_bpl]
106
        add     edi,    [_bottom_total_bpl]
105
	add		edi, [_bottom_total_bpl]
Line 109... Line 108...
109
        emms
108
	emms
110
        ret
109
	ret
111
endp
110
endp
Line 112... Line 111...
112
 
111
 
113
 
112
 
114
proc merge_8a _copy_width, _copy_height, _img_total_bpl, _bottom_total_bpl
113
proc	xcf._.merge_8a _copy_width, _copy_height, _img_total_bpl, _bottom_total_bpl
115
.gray_line:
114
  .gray_line:
116
        mov     ecx,    [_copy_width]
115
	mov		ecx, [_copy_width]
117
.gray_pixel:
116
  .gray_pixel:
Line 121... Line 120...
121
        movd    mm3,    eax
120
	movd		mm3, eax
122
        shr     eax,    8
121
	shr		eax, 8
123
        cmp     al,     bh
122
	cmp		al, bh
124
         jna    @f
123
	jna		@f
125
        mov     al,     bh
124
	mov		al, bh
-
 
125
    @@:
126
@@:     pxor    mm0,    mm0
126
	pxor		mm0, mm0
127
        call    edx
127
	call		edx
128
        call    blend_gray
128
	call		xcf._.blend_gray
129
        stosw
129
	stosw
130
        dec     ecx
130
	dec		ecx
131
         jnz    .gray_pixel
131
	jnz		.gray_pixel
132
        add     esi,    [_img_total_bpl]
132
	add		esi, [_img_total_bpl]
133
        add     edi,    [_bottom_total_bpl]
133
	add		edi, [_bottom_total_bpl]
Line 136... Line 136...
136
        emms
136
	emms
137
        ret
137
	ret
138
endp
138
endp
Line 139... Line 139...
139
 
139
 
Line -... Line 140...
-
 
140
 
140
 
141
proc	xcf._.composite_rgb_00 _copy_width, _copy_height, _bottom_total_bpl, _img_total_bpl
-
 
142
 
141
proc composite_rgb_00 _copy_width, _copy_height, _bottom_total_bpl, _img_total_bpl
143
  .line:
142
 
144
	mov		ecx, [_copy_width]
143
.line:  mov     ecx,    [_copy_width]
145
  .pixel:
144
.pixel: mov     ebx,    [edi]
146
	mov		ebx, [edi]
Line 145... Line 147...
145
        lodsd
147
	lodsd
Line 164... Line 166...
164
        not     al
166
	not		al
165
        div     bh
167
	div		bh
166
@@:
168
    @@:
Line 167... Line 169...
167
 
169
 
-
 
170
	mov		ah, al
168
        mov     ah,     al
171
 
169
        movd    mm1,    eax
172
	movd		mm1, eax
170
        pxor    mm0,    mm0
173
	pxor		mm0, mm0
171
        punpcklbw   mm1,    mm1
174
	punpcklbw	mm1, mm1
172
        punpcklbw   mm1,    mm0
175
	punpcklbw	mm1, mm0
Line 192... Line 195...
192
 
195
 
193
        ret
196
	ret
Line 194... Line 197...
194
endp
197
endp
Line -... Line 198...
-
 
198
 
195
 
199
 
-
 
200
proc	xcf._.composite_gray_00 _copy_width, _copy_height, _bottom_total_bpl, _img_total_bpl
196
 
201
 
197
proc composite_gray_00 _copy_width, _copy_height, _bottom_total_bpl, _img_total_bpl
202
  .line:
198
 
203
	mov		ecx, [_copy_width]
199
.line:  mov     ecx,    [_copy_width]
204
  .pixel:
Line 200... Line 205...
200
.pixel: mov     bx,     [edi]
205
	mov		bx, [edi]
Line 219... Line 224...
219
        not     al
224
	not		al
220
        div     bh
225
	div		bh
221
@@:
226
    @@:
Line 222... Line 227...
222
 
227
 
-
 
228
	mov		ah, al
223
        mov     ah,     al
229
 
224
        movd    mm1,    eax
230
	movd		mm1, eax
225
        pxor    mm0,    mm0
231
	pxor		mm0, mm0
226
        punpcklbw   mm1,    mm1
232
	punpcklbw	mm1, mm1
227
        punpcklbw   mm1,    mm0
233
	punpcklbw	mm1, mm0
Line 247... Line 253...
247
 
253
 
248
        ret
254
	ret
Line 249... Line 255...
249
endp
255
endp
Line -... Line 256...
-
 
256
 
250
 
257
 
-
 
258
proc	xcf._.composite_indexed_00 _copy_width, _copy_height, _bottom_total_bpl, _img_total_bpl
251
 
259
 
252
proc composite_indexed_00 _copy_width, _copy_height, _bottom_total_bpl, _img_total_bpl
260
  .line:
Line 253... Line 261...
253
 
261
	mov		ecx, [_copy_width]
254
.line:  mov     ecx,    [_copy_width]
262
  .pixel:
255
.pixel: mov     bx,     [edi]
263
	mov		bx, [edi]
256
        lodsw
264
	lodsw
-
 
265
 
257
 
266
	or		ah, 0x7f
Line 258... Line 267...
258
        or      ah,     0x7f
267
	test		ah, 0x80
259
        test    ah,     0x80
268
	jnz		@f
260
         jnz    @f
269
	mov		ax, bx
261
        mov     ax,     bx
270
    @@:
Line 269... Line 278...
269
         jnz    .line
278
	jnz		.line
270
        ret
279
	ret
271
endp
280
endp
Line 272... Line 281...
272
 
281
 
273
 
282
 
Line 274... Line 283...
274
proc composite_rgb_01 _copy_width, _copy_height, _bottom_total_bpl, _img_total_bpl
283
proc	xcf._.composite_rgb_01 _copy_width, _copy_height, _bottom_total_bpl, _img_total_bpl
275
        pushad
284
	pushad
276
 
285
 
277
        pxor    mm4,    mm4
286
	pxor		mm4, mm4
Line -... Line 287...
-
 
287
	movd		mm4, [xcf._.random_b]
278
        movd    mm4,    [random_b]
288
	movd		mm1, [xcf._.random_a]
-
 
289
	movd		mm2, [xcf._.random_c]
279
        movd    mm1,    [random_a]
290
 
280
        movd    mm2,    [random_c]
291
  .line:
Line 281... Line 292...
281
        
292
	mov		ecx, [_copy_width]
282
.line:  mov     ecx,    [_copy_width]
293
  .pixel:
283
.pixel: mov     ebx,    [edi]
294
	mov		ebx, [edi]
Line 297... Line 308...
297
        cmp     dl,     al
308
	cmp		dl, al
298
         ja     @f
309
	ja		@f
299
        ror     eax,    8
310
	ror		eax, 8
300
        or      eax,    0xff000000
311
	or		eax, 0xff000000
301
         jmp    .done
312
	jmp		.done
-
 
313
    @@:
302
@@:     mov     eax,    ebx
314
	mov		eax, ebx
-
 
315
  .done:
303
.done:  stosd
316
	stosd
304
        dec     ecx
317
	dec		ecx
305
         jnz    .pixel
318
	jnz		.pixel
306
        add     esi,    [_img_total_bpl]
319
	add		esi, [_img_total_bpl]
307
        add     edi,    [_bottom_total_bpl]
320
	add		edi, [_bottom_total_bpl]
308
        dec     [_copy_height]
321
	dec		[_copy_height]
309
         jnz    .line
322
	jnz		.line
Line -... Line 323...
-
 
323
 
310
 
324
  .quit:
311
.quit:  popad
325
	popad
312
        ret
326
	ret
Line 313... Line 327...
313
endp
327
endp
314
 
328
 
Line 315... Line 329...
315
 
329
 
316
proc composite_gray_01 _copy_width, _copy_height, _bottom_total_bpl, _img_total_bpl
330
proc	xcf._.composite_gray_01 _copy_width, _copy_height, _bottom_total_bpl, _img_total_bpl
317
        pushad
331
	pushad
318
        
332
 
Line -... Line 333...
-
 
333
	pxor		mm4, mm4
319
        pxor    mm4,    mm4
334
	movd		mm4, [xcf._.random_b]
-
 
335
	movd		mm1, [xcf._.random_a]
320
        movd    mm4,    [random_b]
336
	movd		mm2, [xcf._.random_c]
321
        movd    mm1,    [random_a]
337
 
Line 322... Line 338...
322
        movd    mm2,    [random_c]
338
  .line:
323
        
339
	mov		ecx, [_copy_width]
324
.line:  mov     ecx,    [_copy_width]
340
  .pixel:
Line 337... Line 353...
337
        shr     edx,    17
353
	shr		edx, 17
338
        cmp     dl,     ah
354
	cmp		dl, ah
339
         ja     @f
355
	ja		@f
340
        or      ax,     0xff00
356
	or		ax, 0xff00
341
         jmp    .done
357
	jmp		.done
-
 
358
    @@:
342
@@:     mov     eax,    ebx
359
	mov		eax, ebx
-
 
360
  .done:
343
.done:  stosw
361
	stosw
344
        dec     ecx
362
	dec		ecx
345
         jnz    .pixel
363
	jnz		.pixel
346
        add     esi,    [_img_total_bpl]
364
	add		esi, [_img_total_bpl]
347
        add     edi,    [_bottom_total_bpl]
365
	add		edi, [_bottom_total_bpl]
348
        dec     [_copy_height]
366
	dec		[_copy_height]
349
         jnz    .line
367
	jnz		.line
Line -... Line 368...
-
 
368
 
350
 
369
  .quit:
351
.quit:  popad
370
	popad
352
        ret
371
	ret
Line 353... Line -...
353
endp
-
 
354
 
-
 
355
 
-
 
356
;proc composite_indexed_01 _copy_width, _copy_height, _bottom_total_bpl, _img_total_bpl
-
 
357
;        pushad
-
 
358
;        
-
 
359
;        pxor    mm4,    mm4
-
 
360
;        movd    mm4,    [random_b]
-
 
361
;        movd    mm1,    [random_a]
-
 
362
;        movd    mm2,    [random_c]
-
 
363
;        
-
 
364
;.line:  mov     ecx,    [_copy_width]
-
 
365
;.pixel: mov     ebx,    [edi]
-
 
366
;        lodsw       
-
 
367
;
-
 
368
;        movq    mm0,    mm4
-
 
369
;        pmuludq mm0,    mm1
-
 
370
;        paddq   mm0,    mm2
-
 
371
;        movd    edx,    mm0
-
 
372
;        movd    mm4,    edx
-
 
373
;        pxor    mm0,    mm0
-
 
374
;
-
 
375
;        test    ah,     ah
-
 
376
;         jz     @f
-
 
377
;        shr     edx,    17
-
 
378
;        cmp     dl,     ah
-
 
379
;         ja     @f
-
 
380
;        or      ax,     0xff00
-
 
381
;         jmp    .done
-
 
382
;@@:     mov     eax,    ebx
-
 
383
;.done:  stosw
-
 
384
;        dec     ecx
-
 
385
;         jnz    .pixel
-
 
386
;        add     esi,    [_img_total_bpl]
-
 
387
;        add     edi,    [_bottom_total_bpl]
-
 
388
;        dec     [_copy_height]
-
 
389
;         jnz    .line
-
 
390
;
-
 
391
;.quit:  popad
-
 
392
;        ret
-
 
393
;endp
372
endp
Line 394... Line 373...
394
 
373
 
395
 
374
 
396
proc composite_rgb_03               ; Multiply
375
proc	xcf._.composite_rgb_03			; Multiply
397
        
376
 
Line 398... Line 377...
398
        punpcklbw   mm2,    mm0
377
	punpcklbw	mm2, mm0
399
        punpcklbw   mm3,    mm0
378
	punpcklbw	mm3, mm0
Line 400... Line 379...
400
        pmullw  mm3,    mm2
379
	pmullw		mm3, mm2
Line 401... Line 380...
401
        psrlw       mm3,    8
380
	psrlw		mm3, 8
402
        
381
 
403
        ret
382
	ret
404
endp
383
endp
405
 
384
 
406
 
385
 
407
proc composite_rgb_04               ; Screen
386
proc	xcf._.composite_rgb_04			; Screen
408
 
387
 
409
        punpcklbw   mm2,    mm0
-
 
410
        punpcklbw   mm3,    mm0
388
	punpcklbw	mm2, mm0
411
        movq    mm4,    [mmx_00ff]
-
 
412
        movq    mm5,    mm4
389
	punpcklbw	mm3, mm0
413
        psubw   mm4,    mm2
390
	movq		mm5, [xcf._.mmx_00ff]
Line 414... Line 391...
414
        psubw   mm5,    mm3
391
	movq		mm4, mm5
Line 415... Line 392...
415
        pmullw  mm4,    mm5
392
	psubw		mm4, mm2
416
        psrlw       mm4,    8
393
	psubw		mm3, mm5
417
        movq    mm3,    [mmx_00ff]
394
	pmullw		mm3, mm4
418
        psubw   mm3,    mm4
395
	psrlw		mm3, 8
419
 
396
	paddw		mm3, mm5
420
        ret
397
	ret
421
endp
398
endp
422
 
399
 
Line 435... Line 412...
435
        
412
 
436
        ret
413
	ret
Line 437... Line 414...
437
endp
414
endp
Line 438... Line 415...
438
 
415
 
439
 
416
 
440
proc composite_rgb_06               ; Difference
417
proc	xcf._.composite_rgb_06			; Difference
441
 
418
 
Line 448... Line 425...
448
 
425
 
449
        ret
426
	ret
Line 450... Line 427...
450
endp
427
endp
Line 451... Line 428...
451
 
428
 
452
 
429
 
453
proc composite_rgb_07               ; Addition
430
proc	xcf._.composite_rgb_07			; Addition
Line 454... Line 431...
454
 
431
 
455
        paddusb mm3,    mm2
432
	paddusb		mm3, mm2
Line 456... Line 433...
456
        punpcklbw   mm2,    mm0
433
	punpcklbw	mm2, mm0
Line 457... Line 434...
457
        punpcklbw   mm3,    mm0
434
	punpcklbw	mm3, mm0
458
 
435
 
459
        ret
436
	ret
460
endp
437
endp
Line 470... Line 447...
470
 
447
 
471
        ret
448
	ret
Line 472... Line 449...
472
endp
449
endp
Line 473... Line 450...
473
 
450
 
474
 
451
 
475
proc composite_rgb_09               ; Darken Only
452
proc	xcf._.composite_rgb_09			; Darken Only
Line 476... Line 453...
476
 
453
 
477
        pminub  mm3,    mm2
454
	pminub		mm3, mm2
Line 478... Line 455...
478
        punpcklbw   mm2,    mm0
455
	punpcklbw	mm2, mm0
Line 479... Line 456...
479
        punpcklbw   mm3,    mm0
456
	punpcklbw	mm3, mm0
480
 
457
 
481
        ret
458
	ret
Line 482... Line 459...
482
endp
459
endp
483
 
460
 
Line 484... Line 461...
484
 
461
 
485
proc composite_rgb_10               ; Lighten Only
462
proc	xcf._.composite_rgb_10			; Lighten Only
Line 486... Line 463...
486
 
463
 
487
        pmaxub  mm3,    mm2
464
	pmaxub		mm3, mm2
Line 488... Line 465...
488
        punpcklbw   mm2,    mm0
465
	punpcklbw	mm2, mm0
489
        punpcklbw   mm3,    mm0
466
	punpcklbw	mm3, mm0
490
 
467
 
491
        ret
468
	ret
Line 492... Line 469...
492
endp
469
endp
493
 
470
 
494
 
471
 
Line 511... Line 488...
511
        rol     eax,    8
488
	rol		eax, 8
512
        rol     ebx,    8
489
	rol		ebx, 8
513
@@:
490
    @@:
514
        mov     ax,     bx
491
	mov		ax, bx
Line 515... Line 492...
515
        
492
 
516
        call    pixel_hsv2rgb
-
 
Line 517... Line 493...
517
 
493
	call		xcf._.hsv2rgb
Line 518... Line 494...
518
 
494
 
519
        movd    mm3,    eax
495
	movd		mm3, eax
Line 525... Line 501...
525
        pop     edx ecx ebx eax
501
	pop		edx ecx ebx eax
526
        ret
502
	ret
527
endp
503
endp
Line 528... Line 504...
528
 
504
 
529
 
505
 
Line 530... Line 506...
530
proc composite_rgb_12               ; Saturation (S of HSV)
506
proc	xcf._.composite_rgb_12			; Saturation (S of HSV)
531
        push    eax ebx ecx edx
507
	push		eax ebx ecx edx
Line 532... Line 508...
532
        
508
 
533
        movd    eax,    mm3
509
	movd		eax, mm3
534
        movd    ebx,    mm2
510
	movd		ebx, mm2
535
 
511
 
Line 536... Line 512...
536
        call    pixel_rgb2hsv
512
	call		xcf._.rgb2hsv
537
        xchg    eax,    ebx
513
	xchg		eax, ebx
538
        call    pixel_rgb2hsv
514
	call		xcf._.rgb2hsv
539
        xchg    eax,    ebx
515
	xchg		eax, ebx
540
        
516
 
541
        ror     eax,    8
517
	ror		eax, 8
Line 542... Line 518...
542
        ror     ebx,    8
518
	ror		ebx, 8
Line 543... Line 519...
543
        mov     ah,     bh
519
	mov		ah, bh
Line 544... Line 520...
544
        rol     eax,    8
520
	rol		eax, 8
Line 557... Line 533...
557
        pop     edx ecx ebx eax
533
	pop		edx ecx ebx eax
558
        ret
534
	ret
559
endp
535
endp
Line 560... Line 536...
560
 
536
 
561
 
537
 
Line 562... Line 538...
562
proc composite_rgb_13               ; Color (H and S of HSL)
538
proc	xcf._.composite_rgb_13			; Color (H and S of HSL)
563
        push    eax ebx ecx edx
539
	push		eax ebx ecx edx
Line 564... Line 540...
564
        
540
 
565
        movd    eax,    mm3
541
	movd		eax, mm3
566
        movd    ebx,    mm2
542
	movd		ebx, mm2
567
 
543
 
Line 568... Line 544...
568
        call    pixel_rgb2hsl
544
	call		xcf._.rgb2hsl
Line 569... Line 545...
569
        xchg    eax,    ebx
545
	xchg		eax,    ebx
Line 570... Line 546...
570
        call    pixel_rgb2hsl
546
	call		xcf._.rgb2hsl
Line 571... Line 547...
571
        xchg    eax,    ebx
547
	xchg		eax,    ebx
Line 584... Line 560...
584
        pop     edx ecx ebx eax
560
	pop		edx ecx ebx eax
585
        ret
561
	ret
586
endp
562
endp
Line 587... Line 563...
587
 
563
 
588
 
564
 
Line 589... Line 565...
589
proc composite_rgb_14               ; Value (V of HSV)
565
proc	xcf._.composite_rgb_14			; Value (V of HSV)
590
        push    eax ebx ecx edx
566
	push		eax ebx ecx edx
Line 591... Line 567...
591
        
567
 
592
        movd    eax,    mm3
568
	movd		eax, mm3
593
        movd    ebx,    mm2
569
	movd		ebx, mm2
594
 
570
 
Line 595... Line 571...
595
        call    pixel_rgb2hsv
571
	call		xcf._.rgb2hsv
596
        xchg    eax,    ebx
572
	xchg		eax, ebx
597
        call    pixel_rgb2hsv
573
	call		xcf._.rgb2hsv
598
        xchg    eax,    ebx
574
	xchg		eax, ebx
599
        
575
 
Line 600... Line 576...
600
        ror     eax,    8
576
	ror		eax, 8
Line 601... Line 577...
601
        ror     ebx,    8
577
	ror		ebx, 8
Line 602... Line 578...
602
        mov     ax,     bx
578
	mov		ax, bx
Line 615... Line 591...
615
        pop     edx ecx ebx eax
591
	pop		edx ecx ebx eax
616
        ret
592
	ret
617
endp
593
endp
Line 618... Line 594...
618
 
594
 
619
 
595
 
Line 620... Line 596...
620
proc composite_rgb_15               ; Divide
596
proc	xcf._.composite_rgb_15			; Divide
621
        push    eax ebx ecx
597
	push		eax ebx ecx
Line 628... Line 604...
628
 
604
 
Line 629... Line 605...
629
        xchg    eax,    ebx
605
	xchg		eax, ebx
Line -... Line 606...
-
 
606
 
630
 
607
	mov		ecx, 3
631
        mov     ecx,    3
608
 
632
 
609
  .color:
633
.color: rol     eax,    8
610
	rol		eax, 8
634
        rol     ebx,    8
611
	rol		ebx, 8
635
        shl     ax,     8
612
	shl		ax, 8
636
        test    bl,     bl
613
	test		bl, bl
637
         jz     .clamp1
614
	jz		.clamp1
638
        cmp     ah,     bl
615
	cmp		ah, bl
-
 
616
	jae		.clamp2
639
         jae    .clamp2
617
	div		bl
640
        div     bl
618
	jmp		.done
641
         jmp    .done
619
  .clamp1:
642
.clamp1:mov     al,     0xff
620
	mov		al, 0xff
643
        test    ah,     ah
621
	test		ah, ah
644
         jnz    @f
-
 
645
        not     al
622
	jnz		@f
-
 
623
	not		al
-
 
624
    @@:
-
 
625
	jmp		.done
-
 
626
  .clamp2:
646
@@:      jmp    .done
627
	mov		al, 0xff
647
.clamp2:mov     al,     0xff
628
	jmp		.done
Line 648... Line 629...
648
         jmp    .done
629
  .done:
649
.done:  mov     ah,     al
630
	mov		ah, al
Line 658... Line 639...
658
        pop     ecx ebx eax
639
	pop		ecx ebx eax
659
        ret
640
	ret
660
endp
641
endp
Line 661... Line 642...
661
 
642
 
662
 
643
 
Line 663... Line 644...
663
proc composite_rgb_16               ; Dodge
644
proc	xcf._.composite_rgb_16			; Dodge
664
        push eax ebx ecx
645
	push		eax ebx ecx
Line 671... Line 652...
671
 
652
 
Line 672... Line 653...
672
        xchg    eax,    ebx
653
	xchg		eax, ebx
Line -... Line 654...
-
 
654
 
673
        
655
	mov		ecx, 3
674
        mov     ecx,    3
656
 
675
 
657
  .color:
676
.color: rol     eax,    8
658
	rol		eax, 8
677
        rol     ebx,    8
659
	rol		ebx, 8
678
        shl     ax,     8
660
	shl		ax, 8
679
        neg     bl
661
	neg		bl
680
        add     bl,     0xff
662
	add		bl, 0xff
681
        test    bl,     bl
663
	test		bl, bl
682
         jz     .clamp1
664
	jz		.clamp1
683
        cmp     ah,     bl
665
	cmp		ah,  bl
-
 
666
	jae		.clamp2
684
         jae    .clamp2
667
	div		bl
685
        div     bl
668
	jmp		.done
686
         jmp    .done
669
  .clamp1:
687
.clamp1:mov     al,     0xff
670
	mov		al, 0xff
688
        test    ah,     ah
671
	test		ah, ah
689
         jnz    @f
-
 
690
        not     al
672
	jnz		@f
-
 
673
	not		al
-
 
674
    @@:
-
 
675
	jmp		.done
-
 
676
  .clamp2:
691
@@:      jmp    .done
677
	mov		al, 0xff
692
.clamp2:mov     al,     0xff
678
	jmp		.done
Line 693... Line 679...
693
         jmp    .done
679
  .done:
694
.done:  mov     ah,     al
680
	mov		ah, al
Line 703... Line 689...
703
        pop     ecx ebx eax
689
	pop		ecx ebx eax
704
        ret
690
	ret
705
endp
691
endp
Line 706... Line 692...
706
 
692
 
707
 
693
 
Line 708... Line 694...
708
proc composite_rgb_17               ; Burn
694
proc	xcf._.composite_rgb_17			; Burn
709
        push eax ebx ecx
695
	push		eax ebx ecx
Line 716... Line 702...
716
 
702
 
Line 717... Line 703...
717
        xchg    eax,    ebx
703
	xchg		eax, ebx
Line -... Line 704...
-
 
704
 
718
        
705
	mov		ecx, 3
719
        mov     ecx,    3
706
 
720
 
707
  .color:
721
.color: rol     eax,    8
708
	rol		eax, 8
722
        rol     ebx,    8
709
	rol		ebx, 8
723
        shl     ax,     8
710
	shl		ax, 8
724
        neg     ah
711
	neg		ah
725
        add     ah,     0xff
712
	add		ah, 0xff
726
        test    bl,     bl
713
	test		bl, bl
727
         jz     .clamp1
714
	jz		.clamp1
728
        cmp     ah,     bl
715
	cmp		ah, bl
-
 
716
	jae		.clamp2
729
         jae    .clamp2
717
	div		bl
730
        div     bl
718
	jmp		.done
731
         jmp    .done
719
  .clamp1:
732
.clamp1:mov     al,     0xff
720
	mov		al, 0xff
-
 
721
	test		ah, ah
733
        test    ah,     ah
722
	jnz		@f
-
 
723
	not		al
734
         jnz    @f
724
    @@:
735
        not     al
725
	jmp		.done
-
 
726
  .clamp2:
736
@@:      jmp    .done
727
	mov		al, 0xff
737
.clamp2:mov     al,     0xff
728
	jmp		.done
738
         jmp    .done
729
  .done:
739
.done:  mov     ah,     al
730
	mov		ah, al
Line 740... Line 731...
740
        neg     ah
731
	neg		ah
Line 750... Line 741...
750
        pop     ecx ebx eax
741
	pop		ecx ebx eax
751
        ret
742
	ret
752
endp
743
endp
Line 753... Line 744...
753
 
744
 
754
 
745
 
Line 755... Line 746...
755
proc composite_rgb_18               ; Hard Light
746
proc	xcf._.composite_rgb_18			; Hard Light
756
        push eax ebx ecx
747
	push		eax ebx ecx
Line 757... Line 748...
757
 
748
 
758
        movd    eax,    mm3
749
	movd		eax, mm3
Line 759... Line 750...
759
        movd    ebx,    mm2
750
	movd		ebx, mm2
Line -... Line 751...
-
 
751
 
760
 
752
	rol		eax, 8
761
        rol     eax,    8
753
	rol		ebx, 8
762
        rol     ebx,    8
754
 
763
 
755
	mov		ecx, 3
764
        mov     ecx,    3
756
 
765
 
757
  .color:
Line 777... Line 769...
777
        add     ah,     0xff
769
	add		ah, 0xff
778
         jmp    .done
770
	jmp		.done
779
.part1:
771
  .part1:
780
        mul     bl
772
	mul		bl
781
        shl     ax,     1
773
	shl		ax, 1
-
 
774
  .done:
782
.done:  loop    .color
775
	loop		.color
Line 783... Line 776...
783
 
776
 
784
        ror     eax,    8
777
	ror		eax, 8
Line 785... Line 778...
785
        movd    mm3,    eax
778
	movd		mm3, eax
Line 790... Line 783...
790
        pop     ecx ebx eax
783
	pop		ecx ebx eax
791
        ret
784
	ret
792
endp
785
endp
Line 793... Line 786...
793
 
786
 
Line 794... Line -...
794
 
-
 
795
proc composite_rgb_20               ; Grain Extract
787
 
796
 
788
proc	xcf._.composite_rgb_20			; Grain Extract
797
        movq        mm4,    [mmx_0080]
789
 
798
        punpcklbw   mm2,    mm0
790
	punpcklbw	mm2, mm0
799
        punpcklbw   mm3,    mm0
791
	punpcklbw	mm3, mm0
800
        movq        mm5,    mm2
792
	movq		mm4, mm2
801
        psubw       mm3,    mm4
793
	psubw		mm3, [xcf._.mmx_0080]
802
        psubsw      mm5,    mm3
794
	psubw		mm4, mm3
803
        packuswb    mm5,    mm0
-
 
804
        punpcklbw   mm5,    mm0
795
	movq		mm3, mm4
805
        movq        mm3,    mm5
796
	packuswb	mm3, mm0
Line 806... Line 797...
806
 
797
	punpcklbw	mm3, mm0
Line 807... Line -...
807
        ret
-
 
808
endp
798
	ret
809
 
799
endp
810
 
-
 
811
proc composite_rgb_21               ; Grain Merge
800
 
812
 
801
 
813
        movq        mm4,    [mmx_0080]
802
proc	xcf._.composite_rgb_21			; Grain Merge
814
        punpcklbw   mm2,    mm0
803
 
815
        punpcklbw   mm3,    mm0
-
 
816
        movq        mm5,    mm2
804
	punpcklbw	mm2, mm0
817
        psubw       mm5,    mm4
805
	punpcklbw	mm3, mm0
Line 818... Line -...
818
        paddsw      mm3,    mm5
-
 
819
        packuswb    mm3,    mm0
-
 
820
        punpcklbw   mm3,    mm0
-
 
821
 
806
	paddw		mm3, mm2
-
 
807
	psubusw		mm3, [xcf._.mmx_0080]
-
 
808
	packuswb	mm3, mm0
-
 
809
	punpcklbw	mm3, mm0
-
 
810
	ret
-
 
811
endp
-
 
812
 
-
 
813
 
-
 
814
; starting numbers for pseudo-random number generator