Guest User

Untitled

a guest
Feb 24th, 2015
342
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ARM 36.40 KB | None | 0 0
  1.  
  2. ; ---------------------------------------------------------------------------
  3.  
  4. ; enum grub_video_bitmap_scale_method (standard) (width 4 bytes)
  5. GRUB_VIDEO_BITMAP_SCALE_METHOD_FASTEST  EQU 0
  6. GRUB_VIDEO_BITMAP_SCALE_METHOD_BEST  EQU 1
  7. GRUB_VIDEO_BITMAP_SCALE_METHOD_NEAREST  EQU 2
  8. GRUB_VIDEO_BITMAP_SCALE_METHOD_BILINEAR  EQU 3
  9.  
  10. ; ---------------------------------------------------------------------------
  11.  
  12. ; enum grub_video_bitmap_selection_method_t (standard) (width 4 bytes)
  13. GRUB_VIDEO_BITMAP_SELECTION_METHOD_STRETCH  EQU 0
  14. GRUB_VIDEO_BITMAP_SELECTION_METHOD_CROP  EQU 1
  15. GRUB_VIDEO_BITMAP_SELECTION_METHOD_PADDING  EQU 2
  16. GRUB_VIDEO_BITMAP_SELECTION_METHOD_FITWIDTH  EQU 3
  17. GRUB_VIDEO_BITMAP_SELECTION_METHOD_FITHEIGHT  EQU 4
  18.  
  19. ; ---------------------------------------------------------------------------
  20.  
  21. ; enum grub_video_bitmap_v_align_t (standard) (width 4 bytes)
  22. GRUB_VIDEO_BITMAP_V_ALIGN_TOP  EQU 0
  23. GRUB_VIDEO_BITMAP_V_ALIGN_CENTER  EQU 1
  24. GRUB_VIDEO_BITMAP_V_ALIGN_BOTTOM  EQU 2
  25.  
  26. ; ---------------------------------------------------------------------------
  27.  
  28. ; enum grub_video_bitmap_h_align_t (standard) (width 4 bytes)
  29. GRUB_VIDEO_BITMAP_H_ALIGN_LEFT  EQU 0
  30. GRUB_VIDEO_BITMAP_H_ALIGN_CENTER  EQU 1
  31. GRUB_VIDEO_BITMAP_H_ALIGN_RIGHT  EQU 2
  32.  
  33. ; Input MD5   : 292D67757D33A86B556A93836318064E
  34. ; Input CRC32 : 6E85B640
  35.  
  36. ; File Name   : Z:\media\Data\repositories\git\bigG\out\target\common\grub\grub-core\video\bitmap_scale_module-bitmap_scale.o
  37. ; Format      : ELF for ARM (Relocatable)
  38. ;
  39. ; EABI version: 5
  40. ;
  41. ; Source File : 'bitmap_scale.c'
  42.  
  43. ; Processor   : ARM
  44. ; ARM architecture: ARMv7-A
  45. ; Target assembler: Generic assembler for ARM
  46. ; Byte sex    : Little endian
  47.  
  48. ; ===========================================================================
  49.  
  50. ; Segment type: Pure code
  51.         AREA .text, CODE
  52.         CODE16
  53.  
  54. ; =============== S U B R O U T I N E =======================================
  55.  
  56. ; Attributes: static
  57.  
  58. ; grub_err_t __fastcall scale_nn(grub_video_bitmap *dst, grub_video_bitmap *src)
  59. scale_nn                ; CODE XREF: grub_video_bitmap_create_scaled+B6p
  60.                     ; grub_video_bitmap_scale_proportional+192p
  61.  
  62. var_84      = -0x84
  63. var_80      = -0x80
  64. var_7C      = -0x7C
  65. ddata       = -0x78
  66. sw      = -0x74
  67. var_70      = -0x70
  68. var_6C      = -0x6C
  69. var_68      = -0x68
  70. var_64      = -0x64
  71. var_60      = -0x60
  72. var_5C      = -0x5C
  73. comp        = -0x58
  74. var_54      = -0x54
  75. var_50      = -0x50
  76. var_4C      = -0x4C
  77. var_48      = -0x48
  78. var_44      = -0x44
  79. var_40      = -0x40
  80. dh      = -0x3C
  81. dy      = -0x38
  82. sh      = -0x34
  83. dstride     = -0x30
  84. sstride     = -0x2C
  85.  
  86. dst = R0                ; grub_video_bitmap *
  87. src = R1                ; grub_video_bitmap *
  88.         CMP     src, #0
  89.         IT NE
  90.         CMPNE       dst, #0
  91.         PUSH.W      {R4-R11,LR}
  92.         MOV     R4, dst
  93.         SUB     SP, SP, #0x64
  94.         MOV     R5, src
  95.         BEQ.W       loc_2C2
  96.         LDR     R7, [dst,#0x28]
  97.         LSLS        R2, R7, #0x1D
  98.         BNE.W       loc_290
  99.         LDR.W       R12, [dst,#0x30]
  100.         TST.W       R12, #7
  101.         BNE.W       loc_290
  102.         LDR     dst, [dst,#0x38]
  103. dst = R4                ; grub_video_bitmap *
  104.         LSLS        R3, R0, #0x1D
  105.         BNE.W       loc_290
  106.         LDR     R2, [dst,#0x40]
  107.         LSLS        R6, R2, #0x1D
  108.         BNE.W       loc_290
  109.         LDR     R6, [src,#0x28]
  110.         LSLS        src, R6, #0x1D
  111. src = R5                ; grub_video_bitmap *
  112.         BNE.W       loc_2AC
  113.         LDR.W       LR, [src,#0x30]
  114.         TST.W       LR, #7
  115.         BNE.W       loc_2AC
  116.         LDR     R1, [src,#0x38]
  117.         LSLS        R3, R1, #0x1D
  118.         BNE.W       loc_2AC
  119.         LDR     R3, [src,#0x40]
  120.         TST.W       R3, #7
  121.         BNE.W       loc_2AC
  122.         CMP     R7, R6
  123.         BNE     loc_70
  124.         LDR     R7, [dst,#0x24]
  125.         LDR     R6, [src,#0x24]
  126.         CMP     R12, LR
  127.         IT EQ
  128.         CMPEQ       R7, R6
  129.         BEQ.W       loc_2D8
  130.  
  131. loc_70                  ; CODE XREF: scale_nn+60j
  132.                     ; scale_nn+2E2j ...
  133.         MOVW        R1, #:lower16:.LC3 ; "dst and src not compatible"
  134.         MOVW        R3, #:lower16:grub_error
  135.         MOVT.W      R1, #:upper16:.LC3 ; "dst and src not compatible"
  136.         MOVT.W      R3, #:upper16:grub_error
  137.         MOVS        R0, #0x26 ; '&'
  138.         BLX     R3 ; grub_error
  139.  
  140. loc_84                  ; CODE XREF: scale_nn+2A4j
  141.                     ; scale_nn+2C0j ...
  142.         CMP     R0, #0
  143.         BNE.W       loc_28A
  144.         LDR     R2, [dst,#0x4C]
  145.         LDR     R3, [dst,#4]
  146.         LDR.W       R9, [src,#0x4C]
  147.         STR     R2, [SP,#0x88+ddata]
  148. ddata = R2              ; grub_uint8_t *
  149. sdata = R9              ; grub_uint8_t *
  150.         LDR     ddata, [src]
  151.         STR     R3, [SP,#0x88+dh]
  152.         LDR     R7, [dst]
  153. dw = R7                 ; unsigned int
  154. dh = R3                 ; unsigned int
  155.         STR     R2, [SP,#0x88+sw]
  156. sw = R2                 ; unsigned int
  157.         LDR     sw, [src,#4]
  158.         LDR     R6, [dst,#0x10]
  159.         STR     R2, [SP,#0x88+sh]
  160. sh = R2                 ; unsigned int
  161.         LDR     sh, [src,#0x14]
  162.         STR     R2, [SP,#0x88+sstride]
  163.         LDR     R2, [dst,#0x14]
  164.         STR     R2, [SP,#0x88+dstride]
  165. dstride = R2                ; unsigned int
  166. bytes_per_pixel = R6            ; unsigned int
  167.         CMP     dh, #0
  168.         BEQ.W       loc_288
  169.  
  170. loc_B0                  ; CODE XREF: scale_nn+358j
  171.         SUBS        R3, bytes_per_pixel, #4
  172.         SUBS        R2, bytes_per_pixel, #1
  173.         LSRS        R3, R3, #2
  174.         CMP     R2, #2
  175.         STR     R2, [SP,#0x88+var_68]
  176.         MOV.W       R2, #0
  177.         MOV     R1, R2
  178.         STR     R2, [SP,#0x88+var_40]
  179.         ADD.W       R2, R3, #1
  180.         SUB.W       R3, R3, #8
  181.         STR     R2, [SP,#0x88+var_48]
  182.         MOV.W       R2, R2,LSL#2
  183.         STR     R3, [SP,#0x88+var_50]
  184.         BIC.W       R3, R3, #7
  185.         STR     R2, [SP,#0x88+var_4C]
  186.         IT LS
  187.         MOVLS       R2, R1
  188.         MOVW        R0, #:lower16:__aeabi_uidiv
  189.         ADD.W       R8, R3, #8
  190.         ADDS        R3, R2, #1
  191.         MOV     src, R0
  192.         STR     R3, [SP,#0x88+var_5C]
  193.         MOV     R0, R3
  194.         ADDS        R3, R2, #2
  195.         STR     R2, [SP,#0x88+comp]
  196.         MOV     dst, R3
  197.         STR     R3, [SP,#0x88+var_84]
  198.         LDR     R3, [SP,#0x88+ddata]
  199.         STR     R1, [SP,#0x88+dy]
  200.         ADDS        R0, R3, R0
  201.         ADDS        R2, R3, R2
  202.         STR     R0, [SP,#0x88+var_64]
  203.         ADDS        R0, R3, R4
  204.         STR     R0, [SP,#0x88+var_60]
  205.         MOV     R0, R5
  206.         MOVT.W      R0, #:upper16:__aeabi_uidiv
  207.         STR     R2, [SP,#0x88+var_54]
  208.         STR     R0, [SP,#0x88+var_80]
  209.         STR     R3, [SP,#0x88+var_44]
  210.  
  211. loc_10E                 ; CODE XREF: scale_nn+284j
  212.         CMP     dw, #0
  213.         BEQ.W       loc_26A
  214.         LDR     R3, [SP,#0x88+var_80]
  215.         MOV.W       R10, #0
  216.         LDR     R1, [SP,#0x88+dh]
  217.         MOV     R11, R10
  218.         LDR     R0, [SP,#0x88+var_40]
  219.         BLX     R3
  220.         LDR     R3, [SP,#0x88+sstride]
  221.         LDR     R5, [SP,#0x88+var_44]
  222.         MUL.W       R3, R3, R0
  223.         STR     R3, [SP,#0x88+var_7C]
  224.         ADDS        R3, #4
  225.         STR     R3, [SP,#0x88+var_70]
  226.         B       loc_1F4
  227. ; ---------------------------------------------------------------------------
  228.  
  229. loc_132                 ; CODE XREF: scale_nn+246j
  230. dx = R11                ; unsigned int
  231.         LDR     R2, [SP,#0x88+var_68]
  232.         CMP     R2, #2
  233.         BLS     loc_1C0
  234.         LDR     R2, [SP,#0x88+var_50]
  235.         ADDS        R2, #0xA
  236.         BHI.W       loc_2A6
  237.         ADD.W       R2, R3, #0x20
  238.         ADD.W       R4, R5, #0x20
  239.         MOVS        R0, #0
  240.         STR     R3, [SP,#0x88+var_6C]
  241.  
  242. loc_14C                 ; CODE XREF: scale_nn+1A0j
  243.         LDR.W       R3, [R2,#-0x20]
  244.         ADDS        R0, #8
  245.         PLD.W       [R2,#0x54]
  246.         CMP     R0, R8
  247.         MOV     LR, R2
  248.         MOV     R1, R4
  249.         STR.W       R3, [R4,#-0x20]
  250.         ADD.W       R2, R2, #0x20
  251.         LDR.W       R3, [R2,#-0x3C]
  252.         ADD.W       R4, R4, #0x20
  253.         STR.W       R3, [R4,#-0x3C]
  254.         LDR.W       R3, [R2,#-0x38]
  255.         STR.W       R3, [R4,#-0x38]
  256.         LDR.W       R3, [R2,#-0x34]
  257.         STR.W       R3, [R4,#-0x34]
  258.         LDR.W       R3, [R2,#-0x30]
  259.         STR.W       R3, [R4,#-0x30]
  260.         LDR.W       R3, [R2,#-0x2C]
  261.         STR.W       R3, [R4,#-0x2C]
  262.         LDR.W       R3, [R2,#-0x28]
  263.         STR.W       R3, [R4,#-0x28]
  264.         LDR.W       R3, [R2,#-0x24]
  265.         STR.W       R3, [R4,#-0x24]
  266.         BNE     loc_14C
  267.         LDR     R3, [SP,#0x88+var_6C]
  268.         MOV     R2, R8
  269.  
  270. loc_1A6                 ; CODE XREF: scale_nn+2AAj
  271.         LDR     R4, [SP,#0x88+var_48]
  272.         SUB.W       LR, LR, #4
  273.  
  274. loc_1AC                 ; CODE XREF: scale_nn+1B8j
  275.         LDR.W       R0, [LR,#4]!
  276.         ADDS        R2, #1
  277.         CMP     R2, R4
  278.         STR.W       R0, [R1],#4
  279.         BCC     loc_1AC
  280.         LDR     R2, [SP,#0x88+var_4C]
  281.         CMP     bytes_per_pixel, R2
  282.         BEQ     loc_1E6
  283.  
  284. loc_1C0                 ; CODE XREF: scale_nn+136j
  285.         LDR     R2, [SP,#0x88+comp]
  286.         LDR     R1, [SP,#0x88+var_54]
  287.         LDRB        R2, [R3,R2]
  288.         STRB.W      R2, [R1,R12]
  289.         LDR     R1, [SP,#0x88+var_5C]
  290.         CMP     R1, bytes_per_pixel
  291.         BCS     loc_1E6
  292.         LDRB        R2, [R3,R1]
  293.         LDR     R1, [SP,#0x88+var_64]
  294.         STRB.W      R2, [R1,R12]
  295.         LDR     R2, [SP,#0x88+var_84]
  296.         CMP     bytes_per_pixel, R2
  297.         BLS     loc_1E6
  298.         LDRB        R3, [R3,R2]
  299.         LDR     R2, [SP,#0x88+var_60]
  300.         STRB.W      R3, [R2,R12]
  301.  
  302. loc_1E6                 ; CODE XREF: scale_nn+1BEj
  303.                     ; scale_nn+1CEj ...
  304.         ADD.W       dx, dx, #1
  305.         LDR     R3, [SP,#0x88+sw]
  306.         CMP     dx, dw
  307.         ADD     R5, bytes_per_pixel
  308.         ADD     R10, R3
  309.         BEQ     loc_26A
  310.  
  311. loc_1F4                 ; CODE XREF: scale_nn+130j
  312.                     ; scale_nn+268j
  313.         MOV     R1, dw
  314.         LDR     R3, [SP,#0x88+var_80]
  315.         MOV     R0, R10
  316.         BLX     R3
  317.         LDR     R3, [SP,#0x88+ddata]
  318.         MUL.W       R0, bytes_per_pixel, R0
  319.         RSB.W       R12, R3, R5
  320.         LDR     R3, [SP,#0x88+var_7C]
  321.         ADDS        R1, R0, R3
  322.         CMP     bytes_per_pixel, #0
  323.         BEQ     loc_1E6
  324.         LDR     R3, [SP,#0x88+var_70]
  325.         ADDS        R2, R3, R0
  326.         ADD.W       R3, sdata, R1
  327.         ADD.W       R0, sdata, R2
  328.         ADDS        R2, R5, #4
  329.         CMP     R3, R2
  330.         IT CC
  331.         CMPCC       R5, R0
  332.         ORR.W       R0, R3, R5
  333.         ITE CS
  334.         MOVCS       R2, #1
  335.         MOVCC       R2, #0
  336.         CMP     bytes_per_pixel, #9
  337.         ITE LS
  338.         MOVLS       R2, #0
  339.         ANDHI.W     R2, R2, #1
  340.         TST.W       R0, #3
  341.         AND.W       R2, R2, #1
  342.         IT NE
  343.         MOVNE       R2, #0
  344.         MOV     LR, R3
  345.         CMP     R2, #0
  346.         BNE.W       loc_132
  347.         ADD     R1, bytes_per_pixel
  348.         MOV     R2, R5
  349.         ADD     R1, sdata
  350.  
  351. loc_250                 ; CODE XREF: scale_nn+25Aj
  352.         LDRB.W      R0, [R3],#1
  353.         CMP     R3, R1
  354.         STRB.W      R0, [R2],#1
  355.         BNE     loc_250
  356.         ADD.W       dx, dx, #1
  357.         LDR     R3, [SP,#0x88+sw]
  358.         CMP     dx, dw
  359.         ADD     R5, bytes_per_pixel
  360.         ADD     R10, R3
  361.         BNE     loc_1F4
  362.  
  363. loc_26A                 ; CODE XREF: scale_nn+110j
  364.                     ; scale_nn+1F2j
  365.         LDR     R2, [SP,#0x88+var_44]
  366.         LDR     R1, [SP,#0x88+dstride]
  367.         LDR     R3, [SP,#0x88+dy]
  368.         ADD     R2, R1
  369.         LDR     R1, [SP,#0x88+sh]
  370.         STR     R2, [SP,#0x88+var_44]
  371.         ADDS        R3, #1
  372.         LDR     R2, [SP,#0x88+var_40]
  373.         STR     R3, [SP,#0x88+dy]
  374.         ADD     R2, R1
  375.         STR     R2, [SP,#0x88+var_40]
  376.         LDR     R2, [SP,#0x88+dh]
  377.         CMP     R3, R2
  378.         BCC.W       loc_10E
  379.  
  380. loc_288                 ; CODE XREF: scale_nn+ACj
  381.         MOVS        R0, #0
  382.  
  383. loc_28A                 ; CODE XREF: scale_nn+86j
  384.         ADD     SP, SP, #0x64
  385.         POP.W       {R4-R11,PC}
  386. ; ---------------------------------------------------------------------------
  387.  
  388. loc_290                 ; CODE XREF: scale_nn+18j scale_nn+24j ...
  389. dst = R4                ; grub_video_bitmap * ; "dst format not supported"
  390. src = R1                ; grub_video_bitmap *
  391.         MOVW        src, #:lower16:.LC1
  392. src = R5                ; grub_video_bitmap *
  393.         MOVW        R3, #:lower16:grub_error
  394.         MOVT.W      R1, #:upper16:.LC1 ; "dst format not supported"
  395.         MOVT.W      R3, #:upper16:grub_error
  396.         MOVS        R0, #0x26 ; '&'
  397.         BLX     R3 ; grub_error
  398.         B       loc_84
  399. ; ---------------------------------------------------------------------------
  400.  
  401. loc_2A6                 ; CODE XREF: scale_nn+13Cj
  402. sdata = R9              ; grub_uint8_t *
  403. dw = R7                 ; unsigned int
  404. bytes_per_pixel = R6            ; unsigned int
  405. dx = R11                ; unsigned int
  406.         MOV     R1, R5
  407.         MOVS        R2, #0
  408.         B       loc_1A6
  409. ; ---------------------------------------------------------------------------
  410.  
  411. loc_2AC                 ; CODE XREF: scale_nn+3Cj scale_nn+48j ...
  412. dst = R4                ; grub_video_bitmap * ; "src format not supported"
  413. src = R5                ; grub_video_bitmap *
  414.         MOVW        R1, #:lower16:.LC2
  415.         MOVW        R3, #:lower16:grub_error
  416.         MOVT.W      R1, #:upper16:.LC2 ; "src format not supported"
  417.         MOVT.W      R3, #:upper16:grub_error
  418.         MOVS        R0, #0x26 ; '&'
  419.         BLX     R3 ; grub_error
  420.         B       loc_84
  421. ; ---------------------------------------------------------------------------
  422.  
  423. loc_2C2                 ; CODE XREF: scale_nn+10j
  424. dst = R0                ; grub_video_bitmap * ; "null bitmap in scale function"
  425. src = R1                ; grub_video_bitmap *
  426.         MOVW        src, #:lower16:.LC0
  427. src = R5                ; grub_video_bitmap *
  428.         MOVW        R3, #:lower16:grub_error
  429.         MOVT.W      R1, #:upper16:.LC0 ; "null bitmap in scale function"
  430.         MOVT.W      R3, #:upper16:grub_error
  431.         MOVS        dst, #0x26 ; '&'
  432. dst = R4                ; grub_video_bitmap *
  433.         BLX     R3 ; grub_error
  434.         B       loc_84
  435. ; ---------------------------------------------------------------------------
  436.  
  437. loc_2D8                 ; CODE XREF: scale_nn+6Cj
  438.         LDR     R7, [dst,#0x2C]
  439.         LDR     R6, [src,#0x2C]
  440.         CMP     R0, R1
  441.         IT EQ
  442.         CMPEQ       R7, R6
  443.         BNE.W       loc_70
  444.         LDR     R0, [dst,#0x34]
  445.         LDR     R1, [src,#0x34]
  446.         CMP     R2, R3
  447.         IT EQ
  448.         CMPEQ       R0, R1
  449.         BNE.W       loc_70
  450.         LDR     R2, [dst,#0x3C]
  451.         LDR     R3, [src,#0x3C]
  452.         CMP     R2, R3
  453.         BNE.W       loc_70
  454.         LDR     R6, [dst,#0x10]
  455.         LDR     R3, [src,#0x10]
  456.         CMP     R6, R3
  457.         BNE     loc_332
  458.         LDR     R7, [dst]
  459.         CBZ     R7, loc_31C
  460.         LDR     R3, [dst,#4]
  461.         STR     R3, [SP,#0x88+dh]
  462.         CBZ     R3, loc_31C
  463.         LDR     R3, [src]
  464.         STR     R3, [SP,#0x88+sw]
  465.         CBZ     R3, loc_31C
  466.         LDR     R3, [src,#4]
  467.         STR     R3, [SP,#0x88+sh]
  468.         CBNZ        R3, loc_348
  469.  
  470. loc_31C                 ; CODE XREF: scale_nn+308j
  471.                     ; scale_nn+30Ej ...
  472.         MOVW        R1, #:lower16:.LC4 ; "bitmap has a zero dimension"
  473.         MOVW        R3, #:lower16:grub_error
  474.         MOVT.W      R1, #:upper16:.LC4 ; "bitmap has a zero dimension"
  475.         MOVT.W      R3, #:upper16:grub_error
  476.         MOVS        R0, #0x26 ; '&'
  477.         BLX     R3 ; grub_error
  478.         B       loc_84
  479. ; ---------------------------------------------------------------------------
  480.  
  481. loc_332                 ; CODE XREF: scale_nn+304j
  482.         MOVW        R1, #:lower16:.LC3 ; "dst and src not compatible"
  483.         MOVW        R3, #:lower16:grub_error
  484.         MOVT.W      R1, #:upper16:.LC3 ; "dst and src not compatible"
  485.         MOVT.W      R3, #:upper16:grub_error
  486.         MOVS        R0, #0x18
  487.         BLX     R3 ; grub_error
  488.         B       loc_84
  489. ; ---------------------------------------------------------------------------
  490.  
  491. loc_348                 ; CODE XREF: scale_nn+31Aj
  492.         LDR     R3, [dst,#0x4C]
  493.         LDR.W       R9, [src,#0x4C]
  494.         STR     R3, [SP,#0x88+ddata]
  495. sdata = R9              ; grub_uint8_t *
  496. dw = R7                 ; unsigned int
  497.         LDR     R3, [dst,#0x14]
  498.         STR     R3, [SP,#0x88+dstride]
  499.         LDR     R3, [src,#0x14]
  500.         STR     R3, [SP,#0x88+sstride]
  501. bytes_per_pixel = R6            ; unsigned int
  502.         B       loc_B0
  503. ; End of function scale_nn
  504.  
  505. ; ---------------------------------------------------------------------------
  506.         ALIGN 4
  507.  
  508. ; =============== S U B R O U T I N E =======================================
  509.  
  510.  
  511. ; grub_err_t __fastcall grub_video_bitmap_create_scaled(grub_video_bitmap **dst, int dst_width, int dst_height, grub_video_bitmap *src, grub_video_bitmap_scale_method scale_method)
  512.         EXPORT grub_video_bitmap_create_scaled
  513. grub_video_bitmap_create_scaled
  514.  
  515. scale_method    =  0
  516.  
  517. dst = R0                ; grub_video_bitmap **
  518. dst_width = R1              ; int
  519. dst_height = R2             ; int
  520. src = R3                ; grub_video_bitmap *
  521.         PUSH.W      {R4-R8,LR}
  522.         MOV     R6, dst
  523.         MOVS        dst, #0
  524. dst = R6                ; grub_video_bitmap **
  525.         MOV     R7, dst_width
  526.         MOV     R8, dst_height
  527.         MOV     R4, src
  528.         STR     R0, [dst]
  529.         CMP     src, #0
  530.         BEQ     loc_444
  531.         LDR     src, [src,#0x28]
  532. src = R4                ; grub_video_bitmap *
  533.         LSLS        R0, R3, #0x1D
  534.         BNE     loc_3DE
  535.         LDR     R3, [src,#0x30]
  536.         LSLS        dst_width, R3, #0x1D
  537. dst_width = R7              ; int
  538.         BNE     loc_3DE
  539.         LDR     R3, [src,#0x38]
  540.         LSLS        dst_height, R3, #0x1D
  541. dst_height = R8             ; int
  542.         BNE     loc_3DE
  543.         LDR     R3, [src,#0x40]
  544.         LSLS        R3, R3, #0x1D
  545.         BNE     loc_3DE
  546.         LDR     R3, [src]
  547.         CMP     R3, #0
  548.         BEQ     loc_42C
  549.         LDR     R3, [src,#4]
  550.         CMP     R3, #0
  551.         BEQ     loc_42C
  552.         LDR     R2, [src,#0x10]
  553.         LDR     R3, [src,#0xC]
  554.         CMP.W       R3, R2,LSL#3
  555.         BEQ     loc_3B6
  556.         MOVW        R1, #:lower16:.LC8 ; "bitmap to scale has inconsistent Bpp an"...
  557.         MOVW        R3, #:lower16:grub_error
  558.         MOVT.W      R1, #:upper16:.LC8 ; "bitmap to scale has inconsistent Bpp an"...
  559.         MOVT.W      R3, #:upper16:grub_error
  560.         MOVS        R0, #0x26 ; '&'
  561.         BLX     R3 ; grub_error
  562.         MOV     R5, R0
  563.  
  564. loc_3B4                 ; CODE XREF: grub_video_bitmap_create_scaled+98j
  565.                     ; grub_video_bitmap_create_scaled+E6j ...
  566.         CBNZ        R5, loc_3D8
  567.  
  568. loc_3B6                 ; CODE XREF: grub_video_bitmap_create_scaled+40j
  569.         CMP.W       dst_height, #0
  570.         IT GT
  571.         CMPGT       dst_width, #0
  572.         BLE     loc_3F6
  573.         MOVW        R5, #:lower16:grub_video_bitmap_create
  574.         MOV     R1, dst_width
  575.         MOVT.W      R5, #:upper16:grub_video_bitmap_create
  576.         MOV     R2, dst_height
  577.         LDR     R3, [src,#0x20]
  578.         MOV     R0, dst
  579.         BLX     R5 ; grub_video_bitmap_create
  580. ret = R0                ; grub_err_t
  581.         MOV     dst_width, ret
  582.         MOV     R5, ret
  583.         CBZ     ret, loc_40E
  584.  
  585. loc_3D8                 ; CODE XREF: grub_video_bitmap_create_scaled:loc_3B4j
  586.                     ; grub_video_bitmap_create_scaled+BEj ...
  587.         MOV     R0, R5
  588.         POP.W       {src-dst_height,PC}
  589. ; ---------------------------------------------------------------------------
  590.  
  591. loc_3DE                 ; CODE XREF: grub_video_bitmap_create_scaled+18j
  592.                     ; grub_video_bitmap_create_scaled+1Ej ...
  593. dst_width = R7              ; int ; "src format not supported for scale"
  594.         MOVW        R1, #:lower16:.LC6
  595.         MOVW        R3, #:lower16:grub_error
  596.         MOVT.W      R1, #:upper16:.LC6 ; "src format not supported for scale"
  597.         MOVT.W      R3, #:upper16:grub_error
  598.         MOVS        R0, #0x26 ; '&'
  599.         BLX     R3 ; grub_error
  600.         MOV     R5, R0
  601.         B       loc_3B4
  602. ; ---------------------------------------------------------------------------
  603.  
  604. loc_3F6                 ; CODE XREF: grub_video_bitmap_create_scaled+62j
  605.         MOVW        R1, #:lower16:.LC9 ; "requested to scale to a size w/ a zero "...
  606.         MOVW        R3, #:lower16:grub_error
  607.         MOVT.W      R1, #:upper16:.LC9 ; "requested to scale to a size w/ a zero "...
  608.         MOVT.W      R3, #:upper16:grub_error
  609.         MOVS        R0, #0x26 ; '&'
  610.         POP.W       {src-dst_height,LR}
  611.         BX      R3 ; grub_error
  612. ; ---------------------------------------------------------------------------
  613.  
  614. loc_40E                 ; CODE XREF: grub_video_bitmap_create_scaled+7Aj
  615. dst = R6                ; grub_video_bitmap ** ; src
  616. dst_height = R8             ; int
  617. src = R4                ; grub_video_bitmap *
  618. ret = R0                ; grub_err_t
  619.         MOV     R1, src
  620.         LDR     ret, [dst] ; dst
  621. ret = R5                ; grub_err_t
  622.         BL      scale_nn
  623.         MOV     R5, R0
  624.         CMP     R0, #0
  625.         BEQ     loc_3D8
  626.         MOVW        R3, #:lower16:grub_video_bitmap_destroy
  627.         LDR     R0, [dst]
  628.         MOVT.W      R3, #:upper16:grub_video_bitmap_destroy
  629.         BLX     R3 ; grub_video_bitmap_destroy
  630.         STR     R7, [dst]
  631.         B       loc_3D8
  632. ; ---------------------------------------------------------------------------
  633.  
  634. loc_42C                 ; CODE XREF: grub_video_bitmap_create_scaled+30j
  635.                     ; grub_video_bitmap_create_scaled+36j
  636. dst_width = R7              ; int ; "source bitmap has a zero dimension"
  637.         MOVW        R1, #:lower16:.LC7
  638.         MOVW        R3, #:lower16:grub_error
  639.         MOVT.W      R1, #:upper16:.LC7 ; "source bitmap has a zero dimension"
  640.         MOVT.W      R3, #:upper16:grub_error
  641.         MOVS        R0, #0x26 ; '&'
  642.         BLX     R3 ; grub_error
  643.         MOV     R5, R0
  644.         B       loc_3B4
  645. ; ---------------------------------------------------------------------------
  646.  
  647. loc_444                 ; CODE XREF: grub_video_bitmap_create_scaled+12j
  648. dst_width = R1              ; int ; "null src bitmap in grub_video_bitmap_cr"...
  649. dst_height = R2             ; int
  650. src = R3                ; grub_video_bitmap *
  651.         MOVW        dst_width, #:lower16:.LC5
  652. dst_width = R7              ; int
  653.         MOVW        src, #:lower16:grub_error
  654. src = R4                ; grub_video_bitmap *
  655.         MOVT.W      R1, #:upper16:.LC5 ; "null src bitmap in grub_video_bitmap_cr"...
  656.         MOVT.W      R3, #:upper16:grub_error
  657.         MOVS        R0, #0x26 ; '&'
  658.         BLX     R3 ; grub_error
  659.         MOV     R5, R0
  660.         B       loc_3B4
  661. ; End of function grub_video_bitmap_create_scaled
  662.  
  663.  
  664. ; =============== S U B R O U T I N E =======================================
  665.  
  666.  
  667. ; grub_err_t __fastcall grub_video_bitmap_scale_proportional(grub_video_bitmap **dst, int dst_width, int dst_height, grub_video_bitmap *src, grub_video_bitmap_scale_method scale_method, grub_video_bitmap_selection_method_t selection_method, grub_video_bitmap_v_align_t v_align, grub_video_bitmap_h_align_t h_align)
  668.         EXPORT grub_video_bitmap_scale_proportional
  669. grub_video_bitmap_scale_proportional
  670.  
  671. dw      = -0x3C
  672. dh      = -0x38
  673. src_height_orig = -0x34
  674. dst_height_orig = -0x30
  675. var_2C      = -0x2C
  676. scale_method    =  0
  677. selection_method=  4
  678. v_align     =  8
  679. h_align     =  0xC
  680.  
  681. dst = R0                ; grub_video_bitmap **
  682. dst_width = R1              ; int
  683. dst_height = R2             ; int
  684. src = R3                ; grub_video_bitmap *
  685.         PUSH.W      {R4-R11,LR}
  686.         MOV     R6, dst
  687.         SUB     SP, SP, #0x1C
  688.         MOVS        dst, #0
  689. dst = R6                ; grub_video_bitmap **
  690.         MOV     R5, dst_width
  691.         MOV     R7, dst_height
  692.         STR     R0, [dst]
  693.         MOV     R4, src
  694.         LDR.W       R8, [SP,#0x40+selection_method]
  695.         LDR.W       R10, [SP,#0x40+v_align]
  696.         LDR.W       R9, [SP,#0x40+h_align]
  697.         CMP     src, #0
  698.         BEQ.W       loc_724
  699.         LDR     src, [src,#0x28]
  700. src = R4                ; grub_video_bitmap *
  701.         LSLS        R0, R3, #0x1D
  702.         BNE     loc_502
  703.         LDR     R3, [src,#0x30]
  704.         LSLS        dst_width, R3, #0x1D
  705.         BNE     loc_502
  706.         LDR     R3, [src,#0x38]
  707.         LSLS        dst_height, R3, #0x1D
  708.         BNE     loc_502
  709.         LDR     R3, [src,#0x40]
  710.         LSLS        R3, R3, #0x1D
  711.         BNE     loc_502
  712.         LDR     R3, [src]
  713.         CMP     R3, #0
  714.         BEQ     loc_53A
  715.         LDR     R3, [src,#4]
  716.         CMP     R3, #0
  717.         BEQ     loc_53A
  718.         LDR     R2, [src,#0x10]
  719.         LDR     R3, [src,#0xC]
  720.         CMP.W       R3, R2,LSL#3
  721.         BEQ     loc_4C4
  722.         MOVW        R1, #:lower16:.LC8 ; "bitmap to scale has inconsistent Bpp an"...
  723.         MOVW        R3, #:lower16:grub_error
  724.         MOVT.W      R1, #:upper16:.LC8 ; "bitmap to scale has inconsistent Bpp an"...
  725.         MOVT.W      R3, #:upper16:grub_error
  726.         MOVS        R0, #0x26 ; '&'
  727.         BLX     R3 ; grub_error
  728.  
  729. loc_4C2                 ; CODE XREF: grub_video_bitmap_scale_proportional+F2j
  730.                     ; grub_video_bitmap_scale_proportional+2DCj
  731.         CBNZ        R0, loc_51A
  732.  
  733. loc_4C4                 ; CODE XREF: grub_video_bitmap_scale_proportional+50j
  734.                     ; grub_video_bitmap_scale_proportional+BCj
  735.         CMP     R7, #0
  736.         IT GT
  737.         CMPGT       R5, #0
  738.         BLE     loc_520
  739.         MOVW        R12, #:lower16:grub_video_bitmap_create
  740.         LDR     R3, [src,#0x20]
  741.         MOVT.W      R12, #:upper16:grub_video_bitmap_create
  742.         MOV     R2, R7
  743.         MOV     R1, R5
  744.         MOV     R0, dst
  745.         BLX     R12 ; grub_video_bitmap_create
  746. ret = R0                ; grub_err_t
  747.         STR     R5, [SP,#0x40+dw]
  748.         STR     R7, [SP,#0x40+dh]
  749.         CBNZ        ret, loc_51A
  750. dw = R5                 ; unsigned int
  751. dh = R7                 ; unsigned int
  752.         ADD.W       R1, R8, #0xFFFFFFFF
  753.         LDR.W       R11, [src]
  754. sw = R11                ; unsigned int
  755.         LDR.W       R8, [src,#4]
  756. sh = R8                 ; unsigned int
  757.         CMP     R1, #3  ; switch 4 cases
  758.         BHI.W       loc_6C6 ; jumptable 000004F6 default case
  759.         TBH.W       [PC,R1,LSL#1] ; switch jump
  760. ; ---------------------------------------------------------------------------
  761. jpt_4F6     DCW 0x95        ; jump table for switch statement
  762.         DCW 0xB6
  763.         DCW 0xDC
  764.         DCW 0x2B
  765. ; ---------------------------------------------------------------------------
  766.  
  767. loc_502                 ; CODE XREF: grub_video_bitmap_scale_proportional+28j
  768.                     ; grub_video_bitmap_scale_proportional+2Ej ...
  769.         MOVW        R1, #:lower16:.LC6 ; "src format not supported for scale"
  770.         MOVW        R3, #:lower16:grub_error
  771.         MOVT.W      R1, #:upper16:.LC6 ; "src format not supported for scale"
  772.         MOVT.W      R3, #:upper16:grub_error
  773.         MOVS        R0, #0x26 ; '&'
  774.         BLX     R3 ; grub_error
  775.         CMP     R0, #0
  776.         BEQ     loc_4C4
  777.  
  778. loc_51A                 ; CODE XREF: grub_video_bitmap_scale_proportional:loc_4C2j
  779.                     ; grub_video_bitmap_scale_proportional+86j ...
  780.         ADD     SP, SP, #0x1C
  781.         POP.W       {src-R11,PC}
  782. ; ---------------------------------------------------------------------------
  783.  
  784. loc_520                 ; CODE XREF: grub_video_bitmap_scale_proportional+6Ej
  785. dst_width = R5              ; int ; "requested to scale to a size w/ a zero "...
  786. dst_height = R7             ; int
  787.         MOVW        R1, #:lower16:.LC9
  788.         MOVW        R3, #:lower16:grub_error
  789.         MOVT.W      R1, #:upper16:.LC9 ; "requested to scale to a size w/ a zero "...
  790.         MOVT.W      R3, #:upper16:grub_error
  791.         MOVS        R0, #0x26 ; '&'
  792.         ADD     SP, SP, #0x1C
  793.         POP.W       {src-R11,LR}
  794.         BX      R3 ; grub_error
  795. ; ---------------------------------------------------------------------------
  796.  
  797. loc_53A                 ; CODE XREF: grub_video_bitmap_scale_proportional+40j
  798.                     ; grub_video_bitmap_scale_proportional+46j
  799. dst = R6                ; grub_video_bitmap ** ; "source bitmap has a zero dimension"
  800. src = R4                ; grub_video_bitmap *
  801.         MOVW        R1, #:lower16:.LC7
  802.         MOVW        R3, #:lower16:grub_error
  803.         MOVT.W      R1, #:upper16:.LC7 ; "source bitmap has a zero dimension"
  804.         MOVT.W      R3, #:upper16:grub_error
  805.         MOVS        R0, #0x26 ; '&'
  806.         BLX     R3 ; grub_error
  807.         B       loc_4C2
  808. ; ---------------------------------------------------------------------------
  809.  
  810. loc_550                 ; CODE XREF: grub_video_bitmap_scale_proportional+9Aj
  811. ret = R0                ; grub_err_t ; jumptable 000004F6 case 3
  812. dw = R5                 ; unsigned int
  813. dh = R7                 ; unsigned int
  814. sw = R11                ; unsigned int
  815. sh = R8                 ; unsigned int
  816.         MUL.W       R1, sw, dh
  817.         MUL.W       ret, sh, dw
  818.         CMP     R1, R0
  819.         BCS.W       loc_6F4
  820.         MOVW        R3, #:lower16:__aeabi_uidiv
  821.         MOV     R0, R1
  822.  
  823. loc_564                 ; CODE XREF: grub_video_bitmap_scale_proportional+21Aj
  824.         MOVT.W      R3, #:upper16:__aeabi_uidiv
  825.         MOV     R1, sh
  826.         BLX     R3 ; __aeabi_uidiv
  827.         CMP     dw, R0
  828.         MOV     R3, R0
  829.         BLS.W       loc_75A
  830.         CMP.W       R9, #1
  831.         BEQ.W       loc_7B8
  832.         BCC.W       loc_75A
  833.         CMP.W       R9, #2
  834.         BNE.W       loc_79E
  835.         MOV.W       LR, #0
  836.         RSB.W       R9, R0, dw
  837.  
  838. loc_590                 ; CODE XREF: grub_video_bitmap_scale_proportional+366j
  839. dx0 = R9                ; unsigned int
  840.         STR     R3, [SP,#0x40+dw]
  841.         MOV     R12, LR
  842.         MOV     R3, LR
  843.         MOV     R5, sh
  844.         MOV     R10, sw
  845.  
  846. loc_59A                 ; CODE XREF: grub_video_bitmap_scale_proportional+208j
  847.                     ; grub_video_bitmap_scale_proportional+254j ...
  848. dy0 = R3                ; unsigned int
  849. sx0 = R12               ; unsigned int
  850. sy0 = R14               ; unsigned int
  851. sw = R10                ; unsigned int
  852. sh = R5                 ; unsigned int
  853.         MOV     R7, R11
  854.         STR.W       R8, [SP,#0x40+src_height_orig]
  855.  
  856. loc_5A0                 ; CODE XREF: grub_video_bitmap_scale_proportional+296j
  857. src_width_orig = R7         ; int
  858.         LDR     R2, [src,#0x10]
  859.         MOV     R1, src ; src
  860.         LDR     R0, [dst]
  861.         LDR.W       R8, [src,#0x4C]
  862.         MUL.W       sx0, R2, sx0
  863. src_data_orig = R8          ; grub_uint8_t *
  864.         LDR.W       R11, [R0]
  865. dst_width_orig = R11            ; int
  866.         MUL.W       R2, R2, dx0
  867.         LDR.W       dx0, [R0,#0x4C]
  868. dst_data_orig = R9          ; grub_uint8_t *
  869.         STR     R2, [SP,#0x40+var_2C]
  870.         LDR     R2, [src,#0x14]
  871.         MLA.W       R12, R2, LR, R12
  872.         LDR     R2, [R0,#4]
  873.         LDR.W       LR, [R0,#0x14]
  874. dstride = R14               ; int
  875.         STR.W       sw, [src]
  876.         STR     R2, [SP,#0x40+dst_height_orig]
  877.         LDR     R2, [SP,#0x40+var_2C]
  878.         ADD.W       R0, src_data_orig, R12
  879.         STR     R0, [src,#0x4C]
  880.         MLA.W       LR, LR, dy0, R2
  881.         LDR     dy0, [dst]
  882.         STR     sh, [src,#4]
  883.         LDR     sh, [SP,#0x40+dw]
  884.         LDR     R0, [R3,#0x4C]
  885.         STR     R5, [R3]
  886.         LDR     R5, [SP,#0x40+dh]
  887.         ADD     R0, LR
  888.         STR     R0, [R3,#0x4C]
  889.         LDR     R0, [dst] ; dst
  890.         STR     R5, [R3,#4]
  891.         BL      scale_nn
  892.         STR.W       src_data_orig, [src,#0x4C]
  893.         MOV     R5, R0
  894.         LDR     R3, [dst]
  895.         LDR     R1, [SP,#0x40+src_height_orig]
  896.         LDR     R2, [SP,#0x40+dst_height_orig]
  897.         STR     src_width_orig, [src]
  898.         STR     R1, [src,#4]
  899.         STR.W       dst_width_orig, [R3]
  900.         STR     R2, [R3,#4]
  901.         STR.W       dst_data_orig, [R3,#0x4C]
  902. ret = R0                ; grub_err_t
  903.         CMP     R5, #0
  904.         BEQ     loc_51A
  905.  
  906. loc_610                 ; CODE XREF: grub_video_bitmap_scale_proportional+282j
  907. ret = R5                ; grub_err_t
  908.         MOVW        R3, #:lower16:grub_video_bitmap_destroy
  909.         LDR     R0, [dst]
  910.         MOVT.W      R3, #:upper16:grub_video_bitmap_destroy
  911.         BLX     R3 ; grub_video_bitmap_destroy
  912.         MOVS        R3, #0
  913.         MOV     R0, ret
  914.         STR     R3, [dst]
  915.         B       loc_51A
  916. ; ---------------------------------------------------------------------------
  917.  
  918. loc_624                 ; CODE XREF: grub_video_bitmap_scale_proportional+9Aj
  919. dst_height = R7             ; int ; jumptable 000004F6 case 0
  920. ret = R0                ; grub_err_t
  921. sw = R11                ; unsigned int
  922. sh = R8                 ; unsigned int
  923.         MUL.W       LR, sw, dst_height
  924.         MUL.W       ret, sh, R5
  925.         CMP     LR, R0
  926.         BCS     loc_6F4
  927.         MOVW        dst_height, #:lower16:__aeabi_uidiv
  928.         MOV     R1, R5
  929.         MOV     R0, LR
  930.  
  931. loc_638                 ; CODE XREF: grub_video_bitmap_scale_proportional+268j
  932.         MOVT.W      R7, #:upper16:__aeabi_uidiv
  933.         BLX     R7 ; __aeabi_uidiv
  934.         CMP     sh, R0
  935.         MOV     R5, R0
  936.         BLS     loc_73A
  937.         CMP.W       R10, #1
  938.         BEQ.W       loc_7C4
  939.         BCC     loc_73A
  940.         CMP.W       R10, #2
  941.         BNE.W       loc_7E2
  942.         MOV.W       R12, #0
  943.         RSB.W       LR, R0, sh
  944. sy0 = R14               ; unsigned int
  945.         MOV     R3, R12
  946.         MOV     R9, R12
  947.         MOV     R10, sw
  948.         B       loc_59A
  949. ; ---------------------------------------------------------------------------
  950.  
  951. loc_666                 ; CODE XREF: grub_video_bitmap_scale_proportional+9Aj
  952. ret = R0                ; grub_err_t ; jumptable 000004F6 case 1
  953.         MUL.W       ret, sw, R7
  954.         MUL.W       R1, sh, R5
  955.         CMP     R0, R1
  956.         IT CC
  957.         MOVCCW      R3, #:lower16:__aeabi_uidiv
  958.         BCC.W       loc_564
  959.  
  960. loc_67A                 ; CODE XREF: grub_video_bitmap_scale_proportional+260j
  961.         MOVW        R2, #:lower16:__aeabi_uidiv
  962.         MOV     R0, R1
  963.         MOVT.W      R2, #:upper16:__aeabi_uidiv
  964.         MOV     R1, sw
  965.         BLX     R2 ; __aeabi_uidiv
  966.         CMP     R7, R0
  967.         MOV     R2, R0
  968.         BLS     loc_748
  969.         CMP.W       R10, #1
  970.         BEQ.W       loc_7D8
  971.         BCC     loc_748
  972.         CMP.W       R10, #2
  973.         BNE.W       loc_7FC
  974.         MOV.W       LR, #0
  975.         SUBS        R3, R7, R0
  976.  
  977. loc_6A6                 ; CODE XREF: grub_video_bitmap_scale_proportional+384j
  978. dy0 = R3                ; unsigned int
  979.         STR     R2, [SP,#0x40+dh]
  980.         MOV     R12, LR
  981.         MOV     R9, LR
  982.         MOV     R5, sh
  983.         MOV     R10, sw
  984.         B       loc_59A
  985. ; ---------------------------------------------------------------------------
  986.  
  987. loc_6B2                 ; CODE XREF: grub_video_bitmap_scale_proportional+9Aj
  988. ret = R0                ; grub_err_t ; jumptable 000004F6 case 2
  989.         MUL.W       ret, sw, R7
  990.         MUL.W       R1, sh, R5
  991.         CMP     R0, R1
  992.         BCS     loc_67A
  993.         MOVW        R7, #:lower16:__aeabi_uidiv
  994.         MOV     R1, R5
  995.         B       loc_638
  996. ; ---------------------------------------------------------------------------
  997.  
  998. loc_6C6                 ; CODE XREF: grub_video_bitmap_scale_proportional+96j
  999. ret = R0                ; grub_err_t ; jumptable 000004F6 default case
  1000.         MOVW        R1, #:lower16:.LC12
  1001.         MOV     R5, #grub_error
  1002.         MOVT.W      R1, #:upper16:.LC12 ; "Invalid selection_method value"
  1003.         MOVS        ret, #0x26 ; '&'
  1004.         BLX     R5 ; grub_error
  1005.         MOV     R5, R0
  1006.  
  1007. loc_6DC                 ; CODE XREF: grub_video_bitmap_scale_proportional+32Cj
  1008.                     ; grub_video_bitmap_scale_proportional+35Aj ...
  1009. ret = R5                ; grub_err_t
  1010.         CMP     ret, #0
  1011.         BNE     loc_610
  1012.         LDR     R2, [src,#4]
  1013.         MOV     R3, ret
  1014.         LDR     R7, [src]
  1015.         MOV     R10, sw
  1016.         MOV     ret, sh
  1017. ret = R3                ; grub_err_t
  1018.         MOV     R12, ret
  1019.         STR     R2, [SP,#0x40+src_height_orig]
  1020.         MOV     LR, ret
  1021.         MOV     R9, ret
  1022.         B       loc_5A0
  1023. ; ---------------------------------------------------------------------------
  1024.  
  1025. loc_6F4                 ; CODE XREF: grub_video_bitmap_scale_proportional+FEj
  1026.                     ; grub_video_bitmap_scale_proportional+1D2j
  1027.         MOVW        R5, #:lower16:__aeabi_uidiv
  1028.         MOV     R1, R7
  1029.         MOVT.W      R5, #:upper16:__aeabi_uidiv
  1030.         BLX     R5 ; __aeabi_uidiv
  1031.         CMP     sw, R0
  1032.         MOV     R10, R0
  1033.         BLS     loc_762
  1034.         CMP.W       R9, #1
  1035.         BEQ     loc_78A
  1036.         BCC     loc_762
  1037.         CMP.W       R9, #2
  1038.         BNE     loc_770
  1039.         MOV.W       LR, #0
  1040.         RSB.W       R12, R0, sw
  1041. sx0 = R12               ; unsigned int
  1042.         MOV     R3, LR
  1043.         MOV     R9, LR
  1044.         MOV     R5, sh
  1045.         B       loc_59A
  1046. ; ---------------------------------------------------------------------------
  1047.  
  1048. loc_724                 ; CODE XREF: grub_video_bitmap_scale_proportional+20j
  1049. src = R3                ; grub_video_bitmap * ; "null src bitmap in grub_video_bitmap_cr"...
  1050.         MOVW        R1, #:lower16:.LC5
  1051.         MOVW        src, #:lower16:grub_error
  1052. src = R4                ; grub_video_bitmap *
  1053.         MOVT.W      R1, #:upper16:.LC5 ; "null src bitmap in grub_video_bitmap_cr"...
  1054.         MOVT.W      R3, #:upper16:grub_error
  1055.         MOVS        R0, #0x26 ; '&'
  1056.         BLX     R3 ; grub_error
  1057.         B       loc_4C2
  1058. ; ---------------------------------------------------------------------------
  1059.  
  1060. loc_73A                 ; CODE XREF: grub_video_bitmap_scale_proportional+1E6j
  1061.                     ; grub_video_bitmap_scale_proportional+1F0j
  1062. sw = R11                ; unsigned int
  1063. sh = R8                 ; unsigned int
  1064.         MOV.W       LR, #0
  1065.         MOV     R10, sw
  1066.         MOV     R12, LR
  1067.         MOV     R3, LR
  1068.         MOV     R9, LR
  1069.         B       loc_59A
  1070. ; ---------------------------------------------------------------------------
  1071.  
  1072. loc_748                 ; CODE XREF: grub_video_bitmap_scale_proportional+230j
  1073.                     ; grub_video_bitmap_scale_proportional+23Aj
  1074.         MOV.W       LR, #0
  1075.         STR     R2, [SP,#0x40+dh]
  1076.  
  1077. loc_74E                 ; CODE XREF: grub_video_bitmap_scale_proportional+304j
  1078.         MOV     R12, LR
  1079.         MOV     R3, LR
  1080.         MOV     R9, LR
  1081.         MOV     R5, sh
  1082.         MOV     R10, sw
  1083.         B       loc_59A
  1084. ; ---------------------------------------------------------------------------
  1085.  
  1086. loc_75A                 ; CODE XREF: grub_video_bitmap_scale_proportional+114j
  1087.                     ; grub_video_bitmap_scale_proportional+120j
  1088.         MOV.W       LR, #0
  1089.         STR     R3, [SP,#0x40+dw]
  1090.         B       loc_74E
  1091. ; ---------------------------------------------------------------------------
  1092.  
  1093. loc_762                 ; CODE XREF: grub_video_bitmap_scale_proportional+2A8j
  1094.                     ; grub_video_bitmap_scale_proportional+2B0j
  1095.         MOV.W       LR, #0
  1096.         MOV     R5, sh
  1097.         MOV     R12, LR
  1098.         MOV     R3, LR
  1099.         MOV     R9, LR
  1100.         B       loc_59A
  1101. ; ---------------------------------------------------------------------------
  1102.  
  1103. loc_770                 ; CODE XREF: grub_video_bitmap_scale_proportional+2B6j
  1104.         MOVW        R1, #:lower16:.LC11 ; "Invalid h_align value"
  1105.         MOV     R5, #grub_error
  1106.         MOVT.W      R1, #:upper16:.LC11 ; "Invalid h_align value"
  1107.         MOVS        R0, #0x26 ; '&'
  1108.         MOV     sw, R10
  1109.         BLX     R5 ; grub_error
  1110.         MOV     R5, R0
  1111.         B       loc_6DC
  1112. ; ---------------------------------------------------------------------------
  1113.  
  1114. loc_78A                 ; CODE XREF: grub_video_bitmap_scale_proportional+2AEj
  1115. sw = R11                ; unsigned int
  1116.         MOV.W       LR, #0
  1117.         RSB.W       R12, R0, sw
  1118.         MOV.W       R12, R12,LSR#1
  1119. sx0 = R12               ; unsigned int
  1120.         MOV     R3, LR
  1121.         MOV     R9, LR
  1122.         MOV     R5, sh
  1123.         B       loc_59A
  1124. ; ---------------------------------------------------------------------------
  1125.  
  1126. loc_79E                 ; CODE XREF: grub_video_bitmap_scale_proportional+128j
  1127.         MOVW        R1, #:lower16:.LC11 ; "Invalid h_align value"
  1128.         MOV     R5, #grub_error
  1129.         MOVT.W      R1, #:upper16:.LC11 ; "Invalid h_align value"
  1130.         MOVS        R0, #0x26 ; '&'
  1131.         STR     R3, [SP,#0x40+dw]
  1132.         BLX     R5 ; grub_error
  1133.         MOV     R5, R0
  1134.         B       loc_6DC
  1135. ; ---------------------------------------------------------------------------
  1136.  
  1137. loc_7B8                 ; CODE XREF: grub_video_bitmap_scale_proportional+11Cj
  1138.         SUBS        R5, R5, R0
  1139.         MOV.W       LR, #0
  1140.         MOV.W       R9, R5,LSR#1
  1141.         B       loc_590
  1142. ; ---------------------------------------------------------------------------
  1143.  
  1144. loc_7C4                 ; CODE XREF: grub_video_bitmap_scale_proportional+1ECj
  1145.         MOV.W       R12, #0
  1146.         RSB.W       LR, R0, sh
  1147.         MOV.W       LR, LR,LSR#1
  1148. sy0 = R14               ; unsigned int
  1149.         MOV     R3, R12
  1150.         MOV     R9, R12
  1151.         MOV     R10, sw
  1152.         B       loc_59A
  1153. ; ---------------------------------------------------------------------------
  1154.  
  1155. loc_7D8                 ; CODE XREF: grub_video_bitmap_scale_proportional+236j
  1156.         SUBS        R7, R7, R0
  1157.         MOV.W       LR, #0
  1158.         LSRS        R3, R7, #1
  1159.         B       loc_6A6
  1160. ; ---------------------------------------------------------------------------
  1161.  
  1162. loc_7E2                 ; CODE XREF: grub_video_bitmap_scale_proportional+1F6j
  1163.         MOVW        R1, #:lower16:.LC10 ; "Invalid v_align value"
  1164.         MOVW        R7, #:lower16:grub_error
  1165.         MOVT.W      R1, #:upper16:.LC10 ; "Invalid v_align value"
  1166.         MOVT.W      R7, #:upper16:grub_error
  1167.         MOVS        R0, #0x26 ; '&'
  1168.         MOV     sh, R5
  1169.         BLX     R7 ; grub_error
  1170.         MOV     R5, R0
  1171.         B       loc_6DC
  1172. ; ---------------------------------------------------------------------------
  1173.  
  1174. loc_7FC                 ; CODE XREF: grub_video_bitmap_scale_proportional+240j
  1175. sh = R8                 ; unsigned int ; "Invalid v_align value"
  1176.         MOVW        R1, #:lower16:.LC10
  1177.         MOV     R5, #grub_error
  1178.         MOVT.W      R1, #:upper16:.LC10 ; "Invalid v_align value"
  1179.         MOVS        R0, #0x26 ; '&'
  1180.         STR     R2, [SP,#0x40+dh]
  1181.         BLX     R5 ; grub_error
  1182.         MOV     R5, R0
  1183.         B       loc_6DC
  1184. ; End of function grub_video_bitmap_scale_proportional
  1185.  
  1186. ; ---------------------------------------------------------------------------
  1187.         ALIGN 4
  1188. ; .text     ends
  1189.  
  1190. ; ===========================================================================
  1191.  
  1192. ; Segment type: Zero-length
  1193.         AREA .data, DATA, ALIGN=0
  1194.         ; ORG 0x818
  1195. ; .data     ends
  1196.  
  1197. ; ===========================================================================
  1198.  
  1199. ; Segment type: Zero-length
  1200.         AREA .bss, DATA, ALIGN=0
  1201.         ; ORG 0x819
  1202. ; .bss      ends
  1203.  
  1204. ; ===========================================================================
  1205.  
  1206. ; Segment type: Pure data
  1207.         AREA .module_license, DATA
  1208.         ; ORG 0x81C
  1209. ; unsigned __int8 grub_module_license[15]
  1210. grub_module_license DCB 0x4C, 0x49, 0x43, 0x45, 0x4E, 0x53, 0x45, 0x3D, 0x47
  1211.         DCB 0x50, 0x4C, 0x76, 0x33, 0x2B, 0
  1212.         ALIGN 4
  1213. ; .module_license ends
  1214.  
  1215. ; ===========================================================================
  1216.  
  1217. ; Segment type: Pure data
  1218.         AREA .rodata.str1.4, DATA, READONLY
  1219.         ; ORG 0x82C
  1220. .LC0        DCB "null bitmap in scale function",0 ; DATA XREF: scale_nn:loc_2C2o
  1221.                     ; scale_nn+2CAo
  1222.         ALIGN 4
  1223. .LC1        DCB "dst format not supported",0 ; DATA XREF: scale_nn:loc_290o
  1224.                     ; scale_nn+298o
  1225.         ALIGN 4
  1226. .LC2        DCB "src format not supported",0 ; DATA XREF: scale_nn:loc_2ACo
  1227.                     ; scale_nn+2B4o
  1228.         ALIGN 4
  1229. .LC3        DCB "dst and src not compatible",0 ; DATA XREF: scale_nn:loc_70o
  1230.                     ; scale_nn+78o ...
  1231.         ALIGN 0x10
  1232. .LC4        DCB "bitmap has a zero dimension",0 ; DATA XREF: scale_nn:loc_31Co
  1233.                     ; scale_nn+324o
  1234. .LC5        DCB "null src bitmap in grub_video_bitmap_create_scaled",0
  1235.                     ; DATA XREF: grub_video_bitmap_create_scaled:loc_444o
  1236.                     ; grub_video_bitmap_create_scaled+F0o ...
  1237.         ALIGN 0x10
  1238. .LC6        DCB "src format not supported for scale",0
  1239.                     ; DATA XREF: grub_video_bitmap_create_scaled:loc_3DEo
  1240.                     ; grub_video_bitmap_create_scaled+8Ao ...
  1241.         ALIGN 4
  1242. .LC7        DCB "source bitmap has a zero dimension",0
  1243.                     ; DATA XREF: grub_video_bitmap_create_scaled:loc_42Co
  1244.                     ; grub_video_bitmap_create_scaled+D8o ...
  1245.         ALIGN 4
  1246. .LC8        DCB "bitmap to scale has inconsistent Bpp and bpp",0
  1247.                     ; DATA XREF: grub_video_bitmap_create_scaled+42o
  1248.                     ; grub_video_bitmap_create_scaled+4Ao ...
  1249.         ALIGN 4
  1250. .LC9        DCB "requested to scale to a size w/ a zero dimension",0
  1251.                     ; DATA XREF: grub_video_bitmap_create_scaled:loc_3F6o
  1252.                     ; grub_video_bitmap_create_scaled+A2o ...
  1253.         ALIGN 4
  1254. .LC10       DCB "Invalid v_align value",0
  1255.                     ; DATA XREF: grub_video_bitmap_scale_proportional:loc_7E2o
  1256.                     ; grub_video_bitmap_scale_proportional+38Eo ...
  1257.         ALIGN 4
  1258. .LC11       DCB "Invalid h_align value",0
  1259.                     ; DATA XREF: grub_video_bitmap_scale_proportional:loc_770o
  1260.                     ; grub_video_bitmap_scale_proportional+320o ...
  1261.         ALIGN 4
  1262. .LC12       DCB "Invalid selection_method value",0
  1263.                     ; DATA XREF: grub_video_bitmap_scale_proportional:loc_6C6o
  1264.                     ; grub_video_bitmap_scale_proportional+276o
  1265.         ALIGN 4
  1266. ; .rodata.str1.4 ends
  1267.  
  1268. ; ===========================================================================
  1269.  
  1270. ; Segment type: Externs
  1271.         IMPORT __aeabi_uidiv    ; CODE XREF: grub_video_bitmap_scale_proportional+10Ep
  1272.                     ; grub_video_bitmap_scale_proportional+1E0p ...
  1273.         IMPORT grub_error   ; CODE XREF: scale_nn+82p
  1274.                     ; scale_nn+2A2p ...
  1275.         IMPORT grub_video_bitmap_create
  1276.                     ; CODE XREF: grub_video_bitmap_create_scaled+74p
  1277.                     ; grub_video_bitmap_scale_proportional+80p
  1278.                     ; DATA XREF: ...
  1279.         IMPORT grub_video_bitmap_destroy
  1280.                     ; CODE XREF: grub_video_bitmap_create_scaled+CAp
  1281.                     ; grub_video_bitmap_scale_proportional+1BEp
  1282.                     ; DATA XREF: ...
  1283.  
  1284.         END
Advertisement
Add Comment
Please, Sign In to add comment