/*******************************************************************************
* This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Synopsys, Inc. - ARC GNU Toolchain support
*******************************************************************************/
package com.arc.cdt.toolchain;
import java.io.IOException;
import java.io.StringReader;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import com.arc.cdt.toolchain.tcf.OrderedProperties;
public enum ArcCpu {
ARCEM("arcem", ArcCpuFamily.ARCEM),
EM("em", ArcCpuFamily.ARCEM),
EM4("em4", ArcCpuFamily.ARCEM),
EM4_DMIPS("em4_dmips", ArcCpuFamily.ARCEM),
EM4_FPUS("em4_fpus", ArcCpuFamily.ARCEM),
EM4_FPUDA("em4_fpuda", ArcCpuFamily.ARCEM),
ARCHS("archs", ArcCpuFamily.ARCHS),
HS("hs", ArcCpuFamily.ARCHS),
HS34("hs34", ArcCpuFamily.ARCHS),
HS38("hs38", ArcCpuFamily.ARCHS),
HS38_LINUX("hs38_linux", ArcCpuFamily.ARCHS),
ARC600("arc600", ArcCpuFamily.ARC600),
ARC700("arc700", ArcCpuFamily.ARC700);
private String string;
private ArcCpuFamily toolchain;
private static Map<ArcCpu, Properties> SET_OPTIONS = new HashMap<>();
static {
for (ArcCpu cpu: ArcCpu.values()) {
SET_OPTIONS.put(cpu, new OrderedProperties());
}
try {
SET_OPTIONS.get(ARCEM).load(new StringReader(
"-mcpu=arcem\n"
+ "-mcode-density\n"
+ "-mmpy-option=2\n"
+ "-mbarrel-shifter\n"
));
SET_OPTIONS.get(EM).load(new StringReader(
"-mcpu=em\n"
+ "-mmpy-option=0\n"
));
SET_OPTIONS.get(EM4).load(new StringReader(
"-mcpu=em4\n"
+ "-mcode-density\n"
+ "-mmpy-option=0\n"
));
SET_OPTIONS.get(EM4_DMIPS).load(new StringReader(
"-mcpu=em4_dmips\n"
+ "-mcode-density\n"
+ "-mmpy-option=2\n"
+ "-mbarrel-shifter\n"
+ "-mdiv-rem\n"
+ "-mnorm\n"
+ "-mswap\n"
));
SET_OPTIONS.get(EM4_FPUS).load(new StringReader(
"-mcpu=em4_fpus\n"
+ "-mcode-density\n"
+ "-mmpy-option=2\n"
+ "-mbarrel-shifter\n"
+ "-mdiv-rem\n"
+ "-mnorm\n"
+ "-mswap\n"
+ "-mfpu=fpus\n"
));
SET_OPTIONS.get(EM4_FPUDA).load(new StringReader(
"-mcpu=em4_fpuda\n"
+ "-mcode-density\n"
+ "-mmpy-option=2\n"
+ "-mbarrel-shifter\n"
+ "-mdiv-rem\n"
+ "-mnorm\n"
+ "-mswap\n"
+ "-mfpu=fpuda\n"
));
SET_OPTIONS.get(ARCHS).load(new StringReader(
"-mcpu=archs\n"
+ "-mdiv-rem\n"
+ "-mmpy-option=2\n"
+ "-mll64\n"
+ "-matomic\n"
));
SET_OPTIONS.get(HS).load(new StringReader(
"-mcpu=hs\n"
+ "-mmpy-option=0\n"
));
SET_OPTIONS.get(HS34).load(new StringReader(
"-mcpu=hs34\n"
+ "-mmpy-option=2\n"
+ "-matomic\n"
));
SET_OPTIONS.get(HS38).load(new StringReader(
"-mcpu=hs38\n"
+ "-mdiv-rem\n"
+ "-mmpy-option=9\n"
+ "-mll64\n"
+ "-matomic\n"
));
SET_OPTIONS.get(HS38_LINUX).load(new StringReader(
"-mcpu=hs38_linux\n"
+ "-mdiv-rem\n"
+ "-mmpy-option=9\n"
+ "-mll64\n"
+ "-matomic\n"
+ "-mfpu=fpud_all\n"
));
} catch (IOException e) {
}
}
private ArcCpu(String string, ArcCpuFamily toolchain) {
this.string = string;
this.toolchain = toolchain;
}
@Override
public String toString() {
return this.string;
}
public static ArcCpu fromCommand(final String command) {
for (ArcCpu cpu : ArcCpu.values()) {
if (command.endsWith(cpu.toString()))
return cpu;
}
throw new IllegalArgumentException("String does not correspond to any ARC CPU.");
}
public Properties getOptionsToSet() {
return SET_OPTIONS.get(this);
}
public ArcCpuFamily getToolChain() {
return toolchain;
}
}