// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0

.extern handler_exception
.extern handler_irq_software
.extern handler_irq_timer
.extern handler_irq_external
.extern _svectors

update_mtvec:
  .section .text
  .global update_mtvec
  la a0, _svectors
  csrw mtvec, a0
  ret

exception_handlers:
  .section .vectors
  .global vector_handlers

  // exception handler
  .org 0x0
  jal x0, handler_exception

  // software interrupt handler
  .org 0x0c
  jal x0, handler_irq_software

  // timer interrupt handler
  .org 0x1c
  jal x0, handler_irq_timer

  // external interrupt handler
  .org 0x2c
  jal x0, handler_irq_external
