123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- //===- X86GenRegisterBankInfo.def ----------------------------*- C++ -*-==//
- //
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
- // See https://llvm.org/LICENSE.txt for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- //
- //===----------------------------------------------------------------------===//
- /// \file
- /// This file defines all the static objects used by X86RegisterBankInfo.
- /// \todo This should be generated by TableGen.
- //===----------------------------------------------------------------------===//
- #ifdef GET_TARGET_REGBANK_INFO_IMPL
- RegisterBankInfo::PartialMapping X86GenRegisterBankInfo::PartMappings[]{
- /* StartIdx, Length, RegBank */
- // GPR value
- {0, 8, X86::GPRRegBank}, // :0
- {0, 16, X86::GPRRegBank}, // :1
- {0, 32, X86::GPRRegBank}, // :2
- {0, 64, X86::GPRRegBank}, // :3
- // FR32/64 , xmm registers
- {0, 32, X86::VECRRegBank}, // :4
- {0, 64, X86::VECRRegBank}, // :5
- // VR128/256/512
- {0, 128, X86::VECRRegBank}, // :6
- {0, 256, X86::VECRRegBank}, // :7
- {0, 512, X86::VECRRegBank}, // :8
- };
- #endif // GET_TARGET_REGBANK_INFO_IMPL
- #ifdef GET_TARGET_REGBANK_INFO_CLASS
- enum PartialMappingIdx {
- PMI_None = -1,
- PMI_GPR8,
- PMI_GPR16,
- PMI_GPR32,
- PMI_GPR64,
- PMI_FP32,
- PMI_FP64,
- PMI_VEC128,
- PMI_VEC256,
- PMI_VEC512
- };
- #endif // GET_TARGET_REGBANK_INFO_CLASS
- #ifdef GET_TARGET_REGBANK_INFO_IMPL
- #define INSTR_3OP(INFO) INFO, INFO, INFO,
- #define BREAKDOWN(INDEX, NUM) \
- { &X86GenRegisterBankInfo::PartMappings[INDEX], NUM }
- // ValueMappings.
- RegisterBankInfo::ValueMapping X86GenRegisterBankInfo::ValMappings[]{
- /* BreakDown, NumBreakDowns */
- // 3-operands instructions (all binary operations should end up with one of
- // those mapping).
- INSTR_3OP(BREAKDOWN(PMI_GPR8, 1)) // 0: GPR_8
- INSTR_3OP(BREAKDOWN(PMI_GPR16, 1)) // 3: GPR_16
- INSTR_3OP(BREAKDOWN(PMI_GPR32, 1)) // 6: GPR_32
- INSTR_3OP(BREAKDOWN(PMI_GPR64, 1)) // 9: GPR_64
- INSTR_3OP(BREAKDOWN(PMI_FP32, 1)) // 12: Fp32
- INSTR_3OP(BREAKDOWN(PMI_FP64, 1)) // 15: Fp64
- INSTR_3OP(BREAKDOWN(PMI_VEC128, 1)) // 18: Vec128
- INSTR_3OP(BREAKDOWN(PMI_VEC256, 1)) // 21: Vec256
- INSTR_3OP(BREAKDOWN(PMI_VEC512, 1)) // 24: Vec512
- };
- #undef INSTR_3OP
- #undef BREAKDOWN
- #endif // GET_TARGET_REGBANK_INFO_IMPL
- #ifdef GET_TARGET_REGBANK_INFO_CLASS
- enum ValueMappingIdx {
- VMI_None = -1,
- VMI_3OpsGpr8Idx = PMI_GPR8 * 3,
- VMI_3OpsGpr16Idx = PMI_GPR16 * 3,
- VMI_3OpsGpr32Idx = PMI_GPR32 * 3,
- VMI_3OpsGpr64Idx = PMI_GPR64 * 3,
- VMI_3OpsFp32Idx = PMI_FP32 * 3,
- VMI_3OpsFp64Idx = PMI_FP64 * 3,
- VMI_3OpsVec128Idx = PMI_VEC128 * 3,
- VMI_3OpsVec256Idx = PMI_VEC256 * 3,
- VMI_3OpsVec512Idx = PMI_VEC512 * 3,
- };
- #undef GET_TARGET_REGBANK_INFO_CLASS
- #endif // GET_TARGET_REGBANK_INFO_CLASS
- #ifdef GET_TARGET_REGBANK_INFO_IMPL
- #undef GET_TARGET_REGBANK_INFO_IMPL
- const RegisterBankInfo::ValueMapping *
- X86GenRegisterBankInfo::getValueMapping(PartialMappingIdx Idx,
- unsigned NumOperands) {
-
- // We can use VMI_3Ops Mapping for all the cases.
- if (NumOperands <= 3 && (Idx >= PMI_GPR8 && Idx <= PMI_VEC512))
- return &ValMappings[(unsigned)Idx * 3];
-
- llvm_unreachable("Unsupported PartialMappingIdx.");
- }
- #endif // GET_TARGET_REGBANK_INFO_IMPL
|