// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package runtime

import "unsafe"

type sigctxt struct {
	info *siginfo
	ctxt unsafe.Pointer
}

//go:nosplit
//go:nowritebarrierrec
func (c *sigctxt) regs() *mcontext { return &(*ucontext)(c.ctxt).uc_mcontext }

func (c *sigctxt) r0() uint32  { return c.regs().__gregs[0] }
func (c *sigctxt) r1() uint32  { return c.regs().__gregs[1] }
func (c *sigctxt) r2() uint32  { return c.regs().__gregs[2] }
func (c *sigctxt) r3() uint32  { return c.regs().__gregs[3] }
func (c *sigctxt) r4() uint32  { return c.regs().__gregs[4] }
func (c *sigctxt) r5() uint32  { return c.regs().__gregs[5] }
func (c *sigctxt) r6() uint32  { return c.regs().__gregs[6] }
func (c *sigctxt) r7() uint32  { return c.regs().__gregs[7] }
func (c *sigctxt) r8() uint32  { return c.regs().__gregs[8] }
func (c *sigctxt) r9() uint32  { return c.regs().__gregs[9] }
func (c *sigctxt) r10() uint32 { return c.regs().__gregs[10] }
func (c *sigctxt) fp() uint32  { return c.regs().__gregs[11] }
func (c *sigctxt) ip() uint32  { return c.regs().__gregs[12] }
func (c *sigctxt) sp() uint32  { return c.regs().__gregs[13] }
func (c *sigctxt) lr() uint32  { return c.regs().__gregs[14] }

//go:nosplit
//go:nowritebarrierrec
func (c *sigctxt) pc() uint32 { return c.regs().__gregs[15] }

func (c *sigctxt) cpsr() uint32    { return c.regs().__gregs[16] }
func (c *sigctxt) fault() uint32   { return uint32(c.info.si_addr) }
func (c *sigctxt) trap() uint32    { return 0 }
func (c *sigctxt) error() uint32   { return 0 }
func (c *sigctxt) oldmask() uint32 { return 0 }

func (c *sigctxt) sigcode() uint32 { return uint32(c.info.si_code) }
func (c *sigctxt) sigaddr() uint32 { return uint32(c.info.si_addr) }

func (c *sigctxt) set_pc(x uint32)  { c.regs().__gregs[15] = x }
func (c *sigctxt) set_sp(x uint32)  { c.regs().__gregs[13] = x }
func (c *sigctxt) set_lr(x uint32)  { c.regs().__gregs[14] = x }
func (c *sigctxt) set_r10(x uint32) { c.regs().__gregs[10] = x }

func (c *sigctxt) set_sigcode(x uint32) { c.info.si_code = int32(x) }
func (c *sigctxt) set_sigaddr(x uint32) {
	c.info.si_addr = uintptr(x)
}
