Skip to content

Commit 7803fa6

Browse files
jkunkeeCommit Bot
authored andcommitted
Move ARM64 Assembler::nop definition from header to source file
When Assembler::nop is in the header, it is considered an inline function. With GN arg is_component_build=true, the V8_EXPORT_PRIVATE mark on the class causes it to be exported every time the header is included. This, in turn, produces a reference to Register::XRegFromCode. Register::XRegFromCode is only ever defined as an inlined function, so that reference is never fulfilled. Clang can avoid this using the /Fc:dllexportInlines- flag to suppress the export of Assembler::nop and so avoid generating the reference to Register::XRegFromCode. MSVC does not support this flag, so this change suppresses the export by moving Assembler::nop's definition to the .cc file. This also allows it to use the inline definition of Register::XRegFromCode. Bug: v8:8870 Change-Id: I1cd33195677256c9dd06c7047fe84e1b912d3151 Reviewed-on: https://chromium-review.googlesource.com/c/1478216 Reviewed-by: Jakob Gruber <jgruber@chromium.org> Commit-Queue: Michael Achenbach <machenbach@chromium.org> Cr-Commit-Position: refs/heads/master@{#59785}
1 parent c7efd0d commit 7803fa6

2 files changed

Lines changed: 7 additions & 4 deletions

File tree

src/arm64/assembler-arm64.cc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1105,6 +1105,12 @@ void Assembler::adr(const Register& rd, Label* label) {
11051105
}
11061106

11071107

1108+
void Assembler::nop(NopMarkerTypes n) {
1109+
DCHECK((FIRST_NOP_MARKER <= n) && (n <= LAST_NOP_MARKER));
1110+
mov(Register::XRegFromCode(n), Register::XRegFromCode(n));
1111+
}
1112+
1113+
11081114
void Assembler::add(const Register& rd,
11091115
const Register& rn,
11101116
const Operand& operand) {

src/arm64/assembler-arm64.h

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1095,10 +1095,7 @@ class V8_EXPORT_PRIVATE Assembler : public AssemblerBase {
10951095
LAST_NOP_MARKER = ADR_FAR_NOP
10961096
};
10971097

1098-
void nop(NopMarkerTypes n) {
1099-
DCHECK((FIRST_NOP_MARKER <= n) && (n <= LAST_NOP_MARKER));
1100-
mov(Register::XRegFromCode(n), Register::XRegFromCode(n));
1101-
}
1098+
void nop(NopMarkerTypes n);
11021099

11031100
// Add.
11041101
void add(const VRegister& vd, const VRegister& vn, const VRegister& vm);

0 commit comments

Comments
 (0)