diff options
author | John Hodge <tpg@ucc.asn.au> | 2017-03-06 10:44:04 +0800 |
---|---|---|
committer | John Hodge <tpg@ucc.asn.au> | 2017-03-06 10:44:04 +0800 |
commit | efa36493b124d5819d2f9687de979af3dc637817 (patch) | |
tree | cb9af9dfd0507a1be8bb4885a4f0c0cfbe53c064 /src/trans | |
parent | 15b32eeb92904d3172eefed614d3a512fc341dbe (diff) | |
download | mrust-efa36493b124d5819d2f9687de979af3dc637817.tar.gz |
Codegen C - Minor fixes
Diffstat (limited to 'src/trans')
-rw-r--r-- | src/trans/codegen_c.cpp | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/src/trans/codegen_c.cpp b/src/trans/codegen_c.cpp index 5c56e4d1..d147e5f8 100644 --- a/src/trans/codegen_c.cpp +++ b/src/trans/codegen_c.cpp @@ -2370,9 +2370,20 @@ namespace { auto fail_ordering = H::get_atomic_ordering(mir_res, name, 7+10+4); emit_atomic_cxchg(e, "memory_order_seq_cst", fail_ordering, true); } - else if( name == "atomic_cxchgweak" || name.compare(0, 7+9+1, "atomic_cxchgweak_") == 0 ) { - auto ordering = H::get_atomic_ordering(mir_res, name, 7+9+1); - emit_atomic_cxchg(e, ordering, ordering, true); + else if( name == "atomic_cxchgweak" ) { + emit_atomic_cxchg(e, "memory_order_seq_cst", "memory_order_seq_cst", true); + } + else if( name == "atomic_cxchgweak_acq" ) { + emit_atomic_cxchg(e, "memory_order_acquire", "memory_order_acquire", true); + } + else if( name == "atomic_cxchgweak_rel" ) { + emit_atomic_cxchg(e, "memory_order_release", "memory_order_relaxed", true); + } + else if( name == "atomic_cxchgweak_acqrel" ) { + emit_atomic_cxchg(e, "memory_order_acq_rel", "memory_order_acquire", true); + } + else if( name == "atomic_cxchgweak_relaxed" ) { + emit_atomic_cxchg(e, "memory_order_relaxed", "memory_order_relaxed", true); } else if( name == "atomic_xchg" || name.compare(0, 7+5, "atomic_xchg_") == 0 ) { auto ordering = H::get_atomic_ordering(mir_res, name, 7+5); @@ -2792,6 +2803,15 @@ namespace { m_of << "INT64_MIN"; else m_of << c.v; + switch(c.t) + { + case ::HIR::CoreType::I64: + case ::HIR::CoreType::I128: + case ::HIR::CoreType::Isize: + m_of << "ull"; + default: + break; + } ), (Uint, switch(c.t) @@ -2808,7 +2828,7 @@ namespace { case ::HIR::CoreType::U64: case ::HIR::CoreType::U128: case ::HIR::CoreType::Usize: - m_of << ::std::hex << "0x" << c.v << ::std::dec; + m_of << ::std::hex << "0x" << c.v << "ull" << ::std::dec; break; case ::HIR::CoreType::Char: assert(0 <= c.v && c.v <= 0x10FFFF); |