blob: b3f4d87506b34f7a8ca737485da0a54c7fdcdafe [file] [log] [blame]
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <string>
#include <hwreg/asm.h>
#include <zxtest/zxtest.h>
namespace {
class TestReg32 : public hwreg::RegisterBase<TestReg32, uint32_t, hwreg::EnablePrinter> {
public:
DEF_FIELD(30, 12, field1);
DEF_BIT(11, field2);
DEF_RSVDZ_FIELD(10, 5);
DEF_FIELD(4, 3, field3);
DEF_RSVDZ_BIT(2);
DEF_RSVDZ_BIT(1);
DEF_FIELD(0, 0, field4);
static auto Get() { return hwreg::RegisterAddr<TestReg32>(0); }
};
TEST(AsmHeader, Output) {
std::string contents = hwreg::AsmHeader()
.Register<TestReg32>("TR32_")
.Macro("TR32_FIELD1_VALUE", 1234u)
.Output("test/reg32.h");
EXPECT_STREQ(R"(// This file is generated. DO NOT EDIT!
#ifndef _TEST_REG32_H_
#define _TEST_REG32_H_ 1
#define TR32_FIELD1 0x7ffff000
#define TR32_FIELD1_SHIFT 12
#define TR32_FIELD1_MASK 0x7ffff
#define TR32_FIELD1_FIELD(x) (((x) & TR32_FIELD1_MASK) << TR32_FIELD1_SHIFT)
#define TR32_FIELD2 0x800
#define TR32_FIELD2_BIT 11
#define TR32_FIELD3 0x18
#define TR32_FIELD3_SHIFT 3
#define TR32_FIELD3_MASK 0x3
#define TR32_FIELD3_FIELD(x) (((x) & TR32_FIELD3_MASK) << TR32_FIELD3_SHIFT)
#define TR32_FIELD4 0x1
#define TR32_FIELD4_BIT 0
#define TR32_RSVDZ 0x7e6
#define TR32_MASK 0x7fffffff
#define TR32_UNKNOWN 0x80000000
#define TR32_FIELD1_VALUE 0x4d2
#endif // _TEST_REG32_H_
)",
contents);
}
} // namespace