nuttx/arch/arm64/src/common/arm64_vfork.h
qinwei1 e77b06721b arch: arm64: ARMv8-A support for NuttX
N/A

Summary:

Arm64 support for NuttX, Features supported:

1. Cortex-a53 single core and SMP support: it's can run into nsh shell at
   qemu virt machine.

2. qemu-a53 board configuration support: it's only for evaluate propose

3. FPU support for armv8-a: FPU context switching at NEON/floating-point
  TRAP is supported.

4. psci interface, armv8 cache operation(data cache) and smccc support.

5. fix mass code style issue, thank for @xiaoxiang781216, @hartmannathan @pkarashchenko

Please refer to boards/arm64/qemu/qemu-a53/README.txt for detail

Note:
1. GCC MACOS issue
The GCC 11.2 toolchain for MACOS may get crash while compiling
float operation function, the following link describe the issue
and give analyse at the issue:

https://bugs.linaro.org/show_bug.cgi?id=5825

it's seem GCC give a wrong instruction at certain machine which
without architecture features

the new toolchain is not available still, so just disable the MACOS
cibuild check at present

Signed-off-by: qinwei1 <qinwei1@xiaomi.com>
2022-07-14 09:35:49 -04:00

90 lines
3.0 KiB
C

/****************************************************************************
* arch/arm64/src/common/arm64_vfork.h
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership. The
* ASF licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
****************************************************************************/
#ifndef __ARCH_ARM_SRC_COMMON_ARM_VFORK_H
#define __ARCH_ARM_SRC_COMMON_ARM_VFORK_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include <arch/irq.h>
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
#define VFORK_REG_X0 (0)
#define VFORK_REG_X1 (1)
#define VFORK_REG_X2 (2)
#define VFORK_REG_X3 (3)
#define VFORK_REG_X4 (4)
#define VFORK_REG_X5 (5)
#define VFORK_REG_X6 (6)
#define VFORK_REG_X7 (7)
#define VFORK_REG_X8 (8)
#define VFORK_REG_X9 (9)
#define VFORK_REG_X10 (10)
#define VFORK_REG_X11 (11)
#define VFORK_REG_X12 (12)
#define VFORK_REG_X13 (13)
#define VFORK_REG_X14 (14)
#define VFORK_REG_X15 (15)
#define VFORK_REG_X16 (16)
#define VFORK_REG_X17 (17)
#define VFORK_REG_X18 (18)
#define VFORK_REG_X19 (19)
#define VFORK_REG_X20 (20)
#define VFORK_REG_X21 (21)
#define VFORK_REG_X22 (22)
#define VFORK_REG_X23 (23)
#define VFORK_REG_X24 (24)
#define VFORK_REG_X25 (25)
#define VFORK_REG_X26 (26)
#define VFORK_REG_X27 (27)
#define VFORK_REG_X28 (28)
#define VFORK_REG_FP (29) /* Frame pointer*/
#define VFORK_REG_LR (30) /* Return address*/
#define VFORK_REG_SP (31) /* Stack pointer*/
#ifdef CONFIG_ARCH_FPU
#define VFORK_REGS_SIZE (32 + XCPTCONTEXT_FPU_REGS)
#else
#define VFORK_REGS_SIZE (32)
#endif
#ifndef __ASSEMBLY__
struct vfork_s
{
uint64_t regs[29];
uint64_t fp;
uint64_t lr;
uint64_t sp;
#ifdef CONFIG_ARCH_FPU
struct fpu_reg fpu;
#endif
};
#endif /* __ASSEMBLY__ */
#endif /* __ARCH_ARM_SRC_COMMON_ARM_VFORK_H */