diff --git a/include/verilatedos.h b/include/verilatedos.h index 625552d4f..6a24ea36f 100644 --- a/include/verilatedos.h +++ b/include/verilatedos.h @@ -38,7 +38,6 @@ // Compiler pragma abstraction #ifdef __GNUC__ -# define VL_ATTR_ALIGNED(alignment) __attribute__((aligned(alignment))) # define VL_ATTR_ALWINLINE __attribute__((always_inline)) inline # define VL_ATTR_NOINLINE __attribute__((noinline)) # define VL_ATTR_COLD __attribute__((cold)) @@ -78,9 +77,6 @@ #endif // Defaults for unsupported compiler features -#ifndef VL_ATTR_ALIGNED -# define VL_ATTR_ALIGNED(alignment) ///< Attribute to align structure to byte alignment -#endif #ifndef VL_ATTR_ALWINLINE # define VL_ATTR_ALWINLINE ///< Attribute to inline, even when not optimizing #endif @@ -142,6 +138,7 @@ #ifndef VL_NO_LEGACY +# define VL_ATTR_ALIGNED(alignment) // Deprecated # define VL_FUNC __func__ // Deprecated # define VL_THREAD // Deprecated # define VL_THREAD_LOCAL thread_local // Deprecated diff --git a/src/V3EmitCHeaders.cpp b/src/V3EmitCHeaders.cpp index 63a06a956..798006653 100644 --- a/src/V3EmitCHeaders.cpp +++ b/src/V3EmitCHeaders.cpp @@ -300,6 +300,7 @@ class EmitCHeader final : public EmitCConstInit { // Open class body {{{ puts("\nclass "); + if (!VN_IS(modp, Class)) puts("alignas(VL_CACHE_LINE_BYTES) "); puts(prefixNameProtect(modp)); if (const AstClass* const classp = VN_CAST(modp, Class)) { puts(" : public "); @@ -329,11 +330,7 @@ class EmitCHeader final : public EmitCConstInit { emitTextSection(modp, VNType::atScInt); // Close class body - if (!VN_IS(modp, Class)) { - puts("} VL_ATTR_ALIGNED(VL_CACHE_LINE_BYTES);\n"); - } else { - puts("};\n"); - } + puts("};\n"); // }}} // Emit out of class function declarations diff --git a/src/V3EmitCModel.cpp b/src/V3EmitCModel.cpp index e7debc3cd..d63708828 100644 --- a/src/V3EmitCModel.cpp +++ b/src/V3EmitCModel.cpp @@ -89,7 +89,7 @@ class EmitCModel final : public EmitCFunc { puts("\n"); puts("// This class is the main interface to the Verilated model\n"); - puts("class " + topClassName() + " VL_NOT_FINAL : "); + puts("class alignas(VL_CACHE_LINE_BYTES) " + topClassName() + " VL_NOT_FINAL : "); if (optSystemC()) { // SC_MODULE, but with multiple-inheritance of VerilatedModel puts("public ::sc_core::sc_module, "); @@ -238,7 +238,7 @@ class EmitCModel final : public EmitCFunc { puts("std::unique_ptr traceConfig() const override final;\n"); } - puts("} VL_ATTR_ALIGNED(VL_CACHE_LINE_BYTES);\n"); + puts("};\n"); ofp()->putsEndGuard(); diff --git a/src/V3EmitCSyms.cpp b/src/V3EmitCSyms.cpp index 59b299d7b..04ea78814 100644 --- a/src/V3EmitCSyms.cpp +++ b/src/V3EmitCSyms.cpp @@ -440,7 +440,8 @@ void EmitCSyms::emitSymHdr() { } puts("\n// SYMS CLASS (contains all model state)\n"); - puts("class " + symClassName() + " final : public VerilatedSyms {\n"); + puts("class alignas(VL_CACHE_LINE_BYTES)" + symClassName() + + " final : public VerilatedSyms {\n"); ofp()->putsPrivate(false); // public: puts("// INTERNAL STATE\n"); @@ -554,7 +555,7 @@ void EmitCSyms::emitSymHdr() { puts("void " + protect("__Vserialize") + "(VerilatedSerialize& os);\n"); puts("void " + protect("__Vdeserialize") + "(VerilatedDeserialize& os);\n"); } - puts("} VL_ATTR_ALIGNED(VL_CACHE_LINE_BYTES);\n"); + puts("};\n"); ofp()->putsEndGuard(); VL_DO_CLEAR(delete m_ofp, m_ofp = nullptr);