Guest User

Untitled

a guest
Feb 19th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.87 KB | None | 0 0
  1. /*Ayla's 1.5x Upscaler - 160x144 to 240x216 */
  2. /* Before:
  3. * a b c d
  4. * e f g h
  5. *
  6. * After (parenthesis = average):
  7. * a (a,b) b c (c,d) d
  8. * (a,e) (a,b,e,f) (b,f) (c,g) (c,d,g,h) (d,h)
  9. * e (e,f) f g (g,h) h
  10. */
  11. void ayla_scale15x(uint32_t *to, uint32_t *from){
  12. uint32_t reg1, reg2, reg3, reg4, reg5;
  13. size_t x, y;
  14.  
  15. for (y=0; y<216/3; y++) {
  16. for (x=0; x<240/6; x++) {
  17. __builtin_prefetch(to+4, 1);
  18.  
  19. // Read b-a
  20. reg1 = *from;
  21. reg5 = reg1 >> 16;
  22. reg2 = (reg1 & 0xf7de0000) >> 1;
  23. reg1 &= 0xffff;
  24. reg1 |= reg2 + ((reg1 & 0xf7de) << 15);
  25.  
  26. // Write (a,b)-a
  27. *to = reg1;
  28. reg1 = (reg1 & 0xf7def7de) >> 1;
  29.  
  30. // Read f-e
  31. reg3 = *(from++ + 160/2);
  32. reg2 = reg3 >> 16;
  33. reg4 = (reg3 & 0xf7de0000) >> 1;
  34. reg3 &= 0xffff;
  35. reg3 |= reg4 + ((reg3 & 0xf7de) << 15);
  36.  
  37. // Write (e,f)-e
  38. *(to + 2*320/2) = reg3;
  39. reg3 = (reg3 & 0xf7def7de) >> 1;
  40.  
  41. // Write (a,b,e,f)-(a,e)
  42. *(to++ + 320/2) = reg1 + reg3;
  43.  
  44. // Read d-c
  45. reg1 = *from;
  46.  
  47. // Write c-b
  48. reg5 |= (reg1 << 16);
  49. *to = reg5;
  50. reg5 = (reg5 & 0xf7def7de) >> 1;
  51.  
  52. // Read h-g
  53. reg3 = *(from++ + 160/2);
  54.  
  55. // Write g-f
  56. reg2 |= (reg3 << 16);
  57. *(to + 2*320/2) = reg2;
  58. reg2 = (reg2 & 0xf7def7de) >> 1;
  59.  
  60. // Write (c,g)-(b,f)
  61. *(to++ + 320/2) = reg2 + reg5;
  62.  
  63. // Write d-(c,d)
  64. reg2 = (reg1 & 0xf7def7de) >> 1;
  65. reg1 = (reg1 & 0xffff0000) | ((reg2 + (reg2 >> 16)) & 0xffff);
  66. *to = reg1;
  67. reg1 = (reg1 & 0xf7def7de) >> 1;
  68.  
  69. // Write h-(g,h)
  70. reg2 = (reg3 & 0xf7def7de) >> 1;
  71. reg3 = (reg3 & 0xffff0000) | ((reg2 + (reg2 >> 16)) & 0xffff);
  72. *(to + 2*320/2) = reg3;
  73. reg3 = ((reg3 & 0xf7def7de) >> 1);
  74.  
  75. // Write (d,h)-(c,d,g,h)
  76. *(to++ + 320/2) = reg1 + reg3;
  77. }
  78.  
  79. to += 2*360/2;
  80. from += 160/2;
  81. }
  82. }
Add Comment
Please, Sign In to add comment