+# register types:
+# 0 - no special type
+# 1 - caller save (register must be saved by the caller of a function)
+# 2 - callee save (register must be saved by the called function)
+# 4 - ignore (do not assign this register)
+# 8 - this is the stack pointer
+# 16 - this is the base pointer
+# NOTE: Make sure to list the registers returning the call-result before all other
+# caller save registers and in the correct order, otherwise it will break
+# the magic!
+# Last entry of each class is the largest Firm-Mode a register can hold
+%reg_classes = (
+ "gp" => [
+ { "name" => "eax", "type" => 1 },
+ { "name" => "edx", "type" => 1 },
+ { "name" => "ebx", "type" => 2 },
+ { "name" => "ecx", "type" => 1 },
+ { "name" => "esi", "type" => 2 },
+ { "name" => "edi", "type" => 2 },
+ { "name" => "ebp", "type" => 16 },
+ { "name" => "esp", "type" => 8 },
+ { "name" => "xxx", "type" => 4 }, # we need a dummy register for NoReg and Unknown nodes
+ { "mode" => "mode_P" }
+ ],
+ "fp" => [
+ { "name" => "xmm0", "type" => 1 },
+ { "name" => "xmm1", "type" => 1 },
+ { "name" => "xmm2", "type" => 1 },
+ { "name" => "xmm3", "type" => 1 },
+ { "name" => "xmm4", "type" => 1 },
+ { "name" => "xmm5", "type" => 1 },
+ { "name" => "xmm6", "type" => 1 },
+ { "name" => "xmm7", "type" => 1 },
+ { "name" => "xxxx", "type" => 4 }, # we need a dummy register for NoReg and Unknown nodes
+ { "mode" => "mode_D" }
+ ]
+); # %reg_classes
+