// Copyright 2017 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.

#ifndef PERIDOT_BIN_LEDGER_COROUTINE_CONTEXT_ARM64_CONTEXT_H_
#define PERIDOT_BIN_LEDGER_COROUTINE_CONTEXT_ARM64_CONTEXT_H_

// Offset of all saved registers.
#define X19_O 0
#define X20_O 8
#define X21_O 16
#define X22_O 24
#define X23_O 32
#define X24_O 40
#define X25_O 48
#define X26_O 56
#define X27_O 64
#define X28_O 72
#define X29_O 80
#define X30_O 88
#define SP_O 96
#define D8_O 104
#define D9_O 112
#define D10_O 120
#define D11_O 128
#define D12_O 136
#define D13_O 144
#define D14_O 152
#define D15_O 160
#define X0_O 168

#if __has_feature(safe_stack)
#define UNSAFE_SP_O 176
#endif

#ifndef __ASSEMBLER__

#include <stddef.h>
#include <stdint.h>

namespace context {

enum Register {
  REG_X19 = 0,
  REG_X20,
  REG_X21,
  REG_X22,
  REG_X23,
  REG_X24,
  REG_X25,
  REG_X26,
  REG_X27,
  REG_X28,
  REG_X29,
  REG_X30,
  REG_SP,
  REG_D8,
  REG_D9,
  REG_D10,
  REG_D11,
  REG_D12,
  REG_D13,
  REG_D14,
  REG_D15,
  REG_X0,
#if __has_feature(safe_stack)
  REG_UNSAFE_SP,
#endif
  NUM_REGISTERS,

  // Special registers.
  REG_ARG0 = REG_X0,
  REG_LR = REG_X30,
};

inline constexpr size_t kAdditionalStackAlignment = 0;

struct InternalContext {
  uint64_t registers[NUM_REGISTERS];
};

#define ASSERT_REGISTER_OFFSET(REG)                                 \
  static_assert(offsetof(struct InternalContext,                    \
                         registers[context::REG_##REG]) == REG##_O, \
                "offset is incorrect")

ASSERT_REGISTER_OFFSET(X19);
ASSERT_REGISTER_OFFSET(X20);
ASSERT_REGISTER_OFFSET(X21);
ASSERT_REGISTER_OFFSET(X22);
ASSERT_REGISTER_OFFSET(X23);
ASSERT_REGISTER_OFFSET(X24);
ASSERT_REGISTER_OFFSET(X25);
ASSERT_REGISTER_OFFSET(X26);
ASSERT_REGISTER_OFFSET(X27);
ASSERT_REGISTER_OFFSET(X28);
ASSERT_REGISTER_OFFSET(X29);
ASSERT_REGISTER_OFFSET(X30);
ASSERT_REGISTER_OFFSET(SP);
ASSERT_REGISTER_OFFSET(D8);
ASSERT_REGISTER_OFFSET(D9);
ASSERT_REGISTER_OFFSET(D10);
ASSERT_REGISTER_OFFSET(D11);
ASSERT_REGISTER_OFFSET(D12);
ASSERT_REGISTER_OFFSET(D13);
ASSERT_REGISTER_OFFSET(D14);
ASSERT_REGISTER_OFFSET(D15);
ASSERT_REGISTER_OFFSET(X0);
#if __has_feature(safe_stack)
ASSERT_REGISTER_OFFSET(UNSAFE_SP);
#endif

}  // namespace context

#endif  // __ASSEMBLER__

#endif  // PERIDOT_BIN_LEDGER_COROUTINE_CONTEXT_ARM64_CONTEXT_H_
