commit 8ddb05ad09a873375be6179d33a9bcd330112c43
Author: John Hodge <tpg@mutabah.net>
Date:   Sun Nov 10 20:39:40 2019 +0800

    Codegen C - Fix errors from travis OSX

diff --git a/src/trans/codegen_c.cpp b/src/trans/codegen_c.cpp
index 85246749..20ff95cb 100644
--- a/src/trans/codegen_c.cpp
+++ b/src/trans/codegen_c.cpp
@@ -602,7 +602,12 @@ namespace {
             }
             else
             {
-                m_of << "static inline uint128_t __mrustc_bitrev128(uint128_t v) { if(v==0) return 0; uint128_t rv = ((uint128_t)__mrustc_bitrev64(v>>64))|((uint128_t)__mrustc_bitrev64(v)<<64); }\n";
+                m_of << "static inline uint128_t __mrustc_bitrev128(uint128_t v) {"
+                    << " if(v==0) return 0;"
+                    << " uint128_t rv = ((uint128_t)__mrustc_bitrev64(v>>64))|((uint128_t)__mrustc_bitrev64(v)<<64);"
+                    << " return rv;"
+                    << " }\n"
+                    ;
             }
             for(int sz = 8; sz <= 64; sz *= 2)
             {
@@ -3949,9 +3954,15 @@ namespace {
                     if (::std::strcmp(r, "{eax}") == 0 || ::std::strcmp(r, "{rax}") == 0) {
                         return "a";
                     }
+                    else if (::std::strcmp(r, "{ebx}") == 0 || ::std::strcmp(r, "{rbx}") == 0) {
+                        return "b";
+                    }
                     else if (::std::strcmp(r, "{ecx}") == 0 || ::std::strcmp(r, "{rcx}") == 0) {
                         return "c";
                     }
+                    else if (::std::strcmp(r, "{edx}") == 0 || ::std::strcmp(r, "{rdx}") == 0) {
+                        return "d";
+                    }
                     else {
                         return r;
                     }
@@ -4010,12 +4021,16 @@ namespace {
             {
                 const auto& v = e.inputs[i];
                 if (i != 0)    m_of << ", ";
+                // TODO: If this is the same reg as an output, use the output index
                 m_of << "\"" << H::convert_reg(v.first.c_str()) << "\" ("; emit_lvalue(v.second); m_of << ")";
             }
             m_of << ": ";
             for (unsigned int i = 0; i < e.clobbers.size(); i++)
             {
                 if (i != 0)    m_of << ", ";
+                if( e.tpl == "cpuid\n" && e.clobbers[i] == "rbx" ) {
+                    continue;
+                }
                 m_of << "\"" << e.clobbers[i] << "\"";
             }
             m_of << ");\n";
@@ -5214,6 +5229,7 @@ namespace {
                 auto ordering = get_atomic_ordering(name, 7+4+1);
                 const auto& ty = params.m_types.at(0);
                 emit_lvalue(e.ret_val); m_of << " = __mrustc_atomicloop" << get_prim_size(ty) << "(";
+                    m_of << "(volatile "; emit_ctype(ty); m_of << "*)";
                     emit_param(e.args.at(0)); m_of << ", "; emit_param(e.args.at(1));
                     if( m_compiler == Compiler::Gcc )
                     {
@@ -5236,6 +5252,7 @@ namespace {
                 const auto& ty = params.m_types.at(0);
                 const char* op = (name.c_str()[7+1] == 'a' ? "imax" : "imin");    // m'a'x vs m'i'n
                 emit_lvalue(e.ret_val); m_of << " = __mrustc_atomicloop" << get_prim_size(ty) << "(";
+                    m_of << "(volatile "; emit_ctype(ty); m_of << "*)";
                     emit_param(e.args.at(0)); m_of << ", "; emit_param(e.args.at(1));
                     if( m_compiler == Compiler::Gcc )
                     {
@@ -5250,6 +5267,7 @@ namespace {
                 const auto& ty = params.m_types.at(0);
                 const char* op = (name.c_str()[7+2] == 'a' ? "umax" : "umin");    // m'a'x vs m'i'n
                 emit_lvalue(e.ret_val); m_of << " = __mrustc_atomicloop" << get_prim_size(ty) << "(";
+                    m_of << "(volatile "; emit_ctype(ty); m_of << "*)";
                     emit_param(e.args.at(0)); m_of << ", "; emit_param(e.args.at(1));
                     if( m_compiler == Compiler::Gcc )
                     {
