1bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao/*
2dfb74c5f597542c7587a4144eb31b143d82a2281Elliott Hughes * Copyright (C) 2016 The Android Open Source Project
3bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao *
4bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao * Licensed under the Apache License, Version 2.0 (the "License");
5bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao * you may not use this file except in compliance with the License.
6bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao * You may obtain a copy of the License at
7bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao *
8dfb74c5f597542c7587a4144eb31b143d82a2281Elliott Hughes *      http://www.apache.org/licenses/LICENSE-2.0
9bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao *
10bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao * Unless required by applicable law or agreed to in writing, software
11bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao * distributed under the License is distributed on an "AS IS" BASIS,
12bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao * See the License for the specific language governing permissions and
14bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao * limitations under the License.
15bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao */
16bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao
17bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao#include "Arch.h"
18bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao
19bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao#include <err.h>
20bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao
21bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao#include <string>
22bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao
23bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gaostd::string to_string(const Arch& arch) {
24bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao  switch (arch) {
25bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao    case Arch::arm:
26bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao      return "arm";
27bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao
28bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao    case Arch::arm64:
29bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao      return "arm64";
30bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao
31bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao    case Arch::mips:
32bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao      return "mips";
33bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao
34bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao    case Arch::mips64:
35bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao      return "mips64";
36bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao
37bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao    case Arch::x86:
38bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao      return "x86";
39bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao
40bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao    case Arch::x86_64:
41bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao      return "x86_64";
42bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao  }
43bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao
44bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao  errx(1, "unknown arch '%zu'", size_t(arch));
45bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao}
46bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao
47bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh GaoArch arch_from_string(const std::string& name) {
48bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao  if (name == "arm") {
49bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao    return Arch::arm;
50bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao  } else if (name == "arm64") {
51bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao    return Arch::arm64;
52bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao  } else if (name == "mips") {
53bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao    return Arch::mips;
54bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao  } else if (name == "mips64") {
55bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao    return Arch::mips64;
56bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao  } else if (name == "x86") {
57bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao    return Arch::x86;
58bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao  } else if (name == "x86_64") {
59bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao    return Arch::x86_64;
60bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao  }
61bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao
62bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao  errx(1, "unknown architecture '%s'", name.c_str());
63bfb6bae9fb5ef42e4f9ae2847f30f41938c04900Josh Gao}
64