f7e899c OvmfPkg: flash driver: drop needlessly wide multiplication (VS2010)

1 file Authored by Scott Duplichan 9 years ago, Committed by lersek 9 years ago,
    OvmfPkg: flash driver: drop needlessly wide multiplication (VS2010)
    
    The current types of subexpressions used in QemuFlashPtr() are as follows.
    (We also show the types of "larger" subexpressions, according to operator
    binding.)
    
      mFlashBase + (Lba * mFdBlockSize) + Offset
          ^          ^         ^            ^
          |          |         |            |
       (UINT8*)   EFI_LBA    UINTN        UINTN
                  (UINT64)
    
      ---------------------------------   ------
                  (UINT8*)                UINTN
    
      ------------------------------------------
                        (UINT8*)
    
    When building with VS2010 for Ia32 / NOOPT, the 64-by-32 bit
    multiplication is translated to an intrinsic, which is not allowed in
    edk2.
    
    Recognize that "Lba" is always bounded by "mFdBlockCount" (an UINTN) here
    -- all callers of QemuFlashPtr() ensure that. In addition, the flash chip
    in question is always under 4GB, which is why we can address it at all on
    Ia32. Narrow "Lba" to UINTN, without any loss of range.
    
    Contributed-under: TianoCore Contribution Agreement 1.0
    
    Signed-off-by: Scott Duplichan <scott@notabs.org>
    
    [commit message by lersek@redhat.com]
    
    Signed-off-by: Laszlo Ersek <lersek@redhat.com>
    
    Build-tested-by: Scott Duplichan <scott@notabs.org>
    
    Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
    
    git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16384 6f19259b-4bc3-4df7-8a09-765794883524