From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-x22a.google.com (mail-wm0-x22a.google.com [IPv6:2a00:1450:400c:c09::22a]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id D50081A1DEA for ; Fri, 9 Sep 2016 07:00:53 -0700 (PDT) Received: by mail-wm0-x22a.google.com with SMTP id w12so34937204wmf.0 for ; Fri, 09 Sep 2016 07:00:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id; bh=5zQsdF/toR9foOXJWtgdgwtyy/nkhR3nwIGpI9ppWKc=; b=fQ8dw4XrdGTVLc1n/wnLnG1ctidOkGSuTr9Pn0RyPX9OqMOJqf2+8HmSbKl89s95Sq XtDg+tvpiarstI9iYycN5JvbNyYr0iMZki0tshrqjZAjdSqMWZMAbEfq+RU6Kjntl2rr 0ApkdtN5b8azG1vfCTY0oT58jYypKTz1zt65g= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=5zQsdF/toR9foOXJWtgdgwtyy/nkhR3nwIGpI9ppWKc=; b=em2tmx8qG0TZ+F94eeOqYuhHxTax+H8ir4AhEbl9XqxaaCRQpESmf06bRIiaW3GriQ lfoTCwfYtnIY975PganX/TcZRbJwhRqEjGsBeSZqMZJJWZRJrIcrnusPG5iVAYcdfyXQ 33TjTj/tg+2s7LPg7gWbCJMHKhw2j8POvM/mj7l/Yb2qIZnIJmSuKUiEtQWvOZtbuvQb 9oqPp0s/vrdgnxXomNIJ24O98CWcL16kIED0tB5tgTahlMf+4iUWG55zuFGJHcWBEMc3 ugO/gjHQ0Lw4Ejq38DAfa39B6PWh2g+QWhRz+/C5nbkQ/5kmmuIUpu/UvrcwxL+PzbH0 NIfg== X-Gm-Message-State: AE9vXwN1oVKJjdvrpXAqI4LR+zENKasfkQZNF6ubeGCFAB1e350p2D+BWM0+ioVw+MTEitmm X-Received: by 10.194.58.178 with SMTP id s18mr3837177wjq.0.1473429652202; Fri, 09 Sep 2016 07:00:52 -0700 (PDT) Received: from localhost.localdomain ([105.190.180.180]) by smtp.gmail.com with ESMTPSA id 1sm9708769wmm.0.2016.09.09.07.00.50 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 09 Sep 2016 07:00:51 -0700 (PDT) From: Ard Biesheuvel To: edk2-devel@lists.01.org, liming.gao@intel.com, leif.lindholm@linaro.org, michael.d.kinney@intel.com Cc: Ard Biesheuvel Date: Fri, 9 Sep 2016 15:00:40 +0100 Message-Id: <1473429644-13480-1-git-send-email-ard.biesheuvel@linaro.org> X-Mailer: git-send-email 2.7.4 Subject: [PATCH v5 0/4] MdePkg: add ARM/AARCH64 support to BaseMemoryLib X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 09 Sep 2016 14:00:54 -0000 This adds ARM and AARCH64 support to both BaseMemoryLib (generic C) and BaseMemoryLibOptDxe (accelerated). The former can be used anywhere, the latter only in places where the caches are guaranteed to be on, not only due to the unaligned accesses but also due to the fact that it uses DC ZVA instructions for clearing memory (AArch64 only). Liming: I will need your R-b for patch #4 (assuming you are ok with it). Thanks. I have tested this version of the series with various emulated, virtualized and bare metal implementations, and I think this is good to go in now. I will follow up with a series that adds BaseMemoryLibOptDxe to ArmVirtQemu and other platforms once I have independent confirmation that everything works as expected (in other wors, Tested-by's are highly appreciated) Changes since v4: - update SetMem() for ARM yet again (reduce code size, and minor performance tweak) - add patch #4 to disallow BaseMemoryLibOptDxe in SEC and PEI phases on ARM and AARCH64 Branch can be found here https://git.linaro.org/people/ard.biesheuvel/uefi-next.git/shortlog/refs/heads/arm64-basememorylib-v5 Changes since v3: - added Liming's R-b - updated SetMem() to avoid unaligned strd (store pair) instructions, which require 32-bit alignment even in cases where ordinary loads and stores do tolerate unaligned accesses (#2) - fix Clang issue in NEON dialect (#3) Branch can be found here https://git.linaro.org/people/ard.biesheuvel/uefi-next.git/shortlog/refs/heads/arm64-basememorylib-v4 Changes since v2: - avoid open coded 64-bit shift (#1) - tweak SetMem implementation (#2) Ard Biesheuvel (4): MdePkg/BaseMemoryLib: widen aligned accesses to 32 or 64 bits MdePkg/BaseMemoryLibOptDxe: add accelerated ARM routines MdePkg/BaseMemoryLibOptDxe: add accelerated AARCH64 routines MdePkg/BaseMemoryLibOptDxe ARM|AARCH64: disallow use in SEC & PEI phases MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf | 2 +- MdePkg/Library/BaseMemoryLib/CopyMem.c | 112 +++++++- MdePkg/Library/BaseMemoryLib/SetMem.c | 40 ++- MdePkg/Library/BaseMemoryLibOptDxe/AArch64/CompareMem.S | 142 ++++++++++ MdePkg/Library/BaseMemoryLibOptDxe/AArch64/CopyMem.S | 284 ++++++++++++++++++++ MdePkg/Library/BaseMemoryLibOptDxe/AArch64/ScanMem.S | 161 +++++++++++ MdePkg/Library/BaseMemoryLibOptDxe/AArch64/SetMem.S | 244 +++++++++++++++++ MdePkg/Library/BaseMemoryLibOptDxe/Arm/CompareMem.S | 138 ++++++++++ MdePkg/Library/BaseMemoryLibOptDxe/Arm/CompareMem.asm | 140 ++++++++++ MdePkg/Library/BaseMemoryLibOptDxe/Arm/CopyMem.S | 172 ++++++++++++ MdePkg/Library/BaseMemoryLibOptDxe/Arm/CopyMem.asm | 147 ++++++++++ MdePkg/Library/BaseMemoryLibOptDxe/Arm/ScanMem.S | 146 ++++++++++ MdePkg/Library/BaseMemoryLibOptDxe/Arm/ScanMem.asm | 147 ++++++++++ MdePkg/Library/BaseMemoryLibOptDxe/Arm/ScanMemGeneric.c | 142 ++++++++++ MdePkg/Library/BaseMemoryLibOptDxe/Arm/SetMem.S | 77 ++++++ MdePkg/Library/BaseMemoryLibOptDxe/Arm/SetMem.asm | 84 ++++++ MdePkg/Library/BaseMemoryLibOptDxe/BaseMemoryLibOptDxe.inf | 46 +++- 17 files changed, 2196 insertions(+), 28 deletions(-) create mode 100644 MdePkg/Library/BaseMemoryLibOptDxe/AArch64/CompareMem.S create mode 100644 MdePkg/Library/BaseMemoryLibOptDxe/AArch64/CopyMem.S create mode 100644 MdePkg/Library/BaseMemoryLibOptDxe/AArch64/ScanMem.S create mode 100644 MdePkg/Library/BaseMemoryLibOptDxe/AArch64/SetMem.S create mode 100644 MdePkg/Library/BaseMemoryLibOptDxe/Arm/CompareMem.S create mode 100644 MdePkg/Library/BaseMemoryLibOptDxe/Arm/CompareMem.asm create mode 100644 MdePkg/Library/BaseMemoryLibOptDxe/Arm/CopyMem.S create mode 100644 MdePkg/Library/BaseMemoryLibOptDxe/Arm/CopyMem.asm create mode 100644 MdePkg/Library/BaseMemoryLibOptDxe/Arm/ScanMem.S create mode 100644 MdePkg/Library/BaseMemoryLibOptDxe/Arm/ScanMem.asm create mode 100644 MdePkg/Library/BaseMemoryLibOptDxe/Arm/ScanMemGeneric.c create mode 100644 MdePkg/Library/BaseMemoryLibOptDxe/Arm/SetMem.S create mode 100644 MdePkg/Library/BaseMemoryLibOptDxe/Arm/SetMem.asm -- 2.7.4