Scalar.cpp revision b50a2f360d56729c9b1082a45ec91faf7448a725
124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- Scalar.cpp ----------------------------------------------*- C++ -*-===// 224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// The LLVM Compiler Infrastructure 424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source 624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details. 724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===// 924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Scalar.h" 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <math.h> 135f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea#include <inttypes.h> 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1584cdc15005983e5244d665fa779e33c2b6fac95fJim Ingham#include "lldb/Interpreter/Args.h" 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Error.h" 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Stream.h" 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/DataExtractor.h" 19cd548034fa23113e995b8463d14f910ba2f7298cGreg Clayton#include "lldb/Host/Endian.h" 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 211716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton#include "Plugins/Process/Utility/InstructionUtils.h" 221716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb; 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb_private; 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Promote to max type currently follows the ANSI C rule for type 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// promotion in expressions. 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerstatic Scalar::Type 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerPromoteToMaxType 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner( 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Scalar& lhs, // The const left hand side object 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Scalar& rhs, // The const right hand side object 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Scalar& temp_value, // A modifiable temp value than can be used to hold either the promoted lhs or rhs object 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Scalar* &promoted_lhs_ptr, // Pointer to the resulting possibly promoted value of lhs (at most one of lhs/rhs will get promoted) 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Scalar* &promoted_rhs_ptr // Pointer to the resulting possibly promoted value of rhs (at most one of lhs/rhs will get promoted) 3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner) 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Scalar result; 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Initialize the promoted values for both the right and left hand side values 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // to be the objects themselves. If no promotion is needed (both right and left 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // have the same type), then the temp_value will not get used. 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner promoted_lhs_ptr = &lhs; 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner promoted_rhs_ptr = &rhs; 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Extract the types of both the right and left hand side values 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Scalar::Type lhs_type = lhs.GetType(); 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Scalar::Type rhs_type = rhs.GetType(); 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (lhs_type > rhs_type) 5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Right hand side need to be promoted 5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner temp_value = rhs; // Copy right hand side into the temp value 5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (temp_value.Promote(lhs_type)) // Promote it 5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner promoted_rhs_ptr = &temp_value; // Update the pointer for the promoted right hand side 5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else if (lhs_type < rhs_type) 5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Left hand side need to be promoted 6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner temp_value = lhs; // Copy left hand side value into the temp value 6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (temp_value.Promote(rhs_type)) // Promote it 6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner promoted_lhs_ptr = &temp_value; // Update the pointer for the promoted left hand side 6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Make sure our type promotion worked as exptected 6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (promoted_lhs_ptr->GetType() == promoted_rhs_ptr->GetType()) 6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return promoted_lhs_ptr->GetType(); // Return the resulting max type 6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Return the void type (zero) if we fail to promote either of the values. 7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return Scalar::e_void; 7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Scalar constructor 7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::Scalar() : 7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type(e_void), 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_data() 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Scalar copy constructor 8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::Scalar(const Scalar& rhs) : 8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type(rhs.m_type), 8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_data(rhs.m_data) // TODO: verify that for C++ this will correctly copy the union?? 8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//Scalar::Scalar(const RegisterValue& reg) : 9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// m_type(e_void), 9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// m_data() 9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//{ 9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// switch (reg.info.encoding) 9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// { 9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// case eEncodingUint: // unsigned integer 9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// switch (reg.info.byte_size) 10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// { 10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// case 1: m_type = e_uint; m_data.uint = reg.value.uint8; break; 10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// case 2: m_type = e_uint; m_data.uint = reg.value.uint16; break; 10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// case 4: m_type = e_uint; m_data.uint = reg.value.uint32; break; 10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// case 8: m_type = e_ulonglong; m_data.ulonglong = reg.value.uint64; break; 10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// break; 10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// } 10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// break; 10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// case eEncodingSint: // signed integer 11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// switch (reg.info.byte_size) 11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// { 11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// case 1: m_type = e_sint; m_data.sint = reg.value.sint8; break; 11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// case 2: m_type = e_sint; m_data.sint = reg.value.sint16; break; 11424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// case 4: m_type = e_sint; m_data.sint = reg.value.sint32; break; 11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// case 8: m_type = e_slonglong; m_data.slonglong = reg.value.sint64; break; 11624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// break; 11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// } 11824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// break; 11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// case eEncodingIEEE754: // float 12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// switch (reg.info.byte_size) 12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// { 12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// case 4: m_type = e_float; m_data.flt = reg.value.float32; break; 12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// case 8: m_type = e_double; m_data.dbl = reg.value.float64; break; 12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// break; 12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// } 12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// break; 12824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// case eEncodingVector: // vector registers 12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// break; 13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// } 13124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//} 13224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::GetData (DataExtractor &data, size_t limit_byte_size) const 13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t byte_size = GetByteSize(); 13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (byte_size > 0) 13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (limit_byte_size < byte_size) 14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 141cd548034fa23113e995b8463d14f910ba2f7298cGreg Clayton if (lldb::endian::InlHostByteOrder() == eByteOrderLittle) 14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // On little endian systems if we want fewer bytes from the 14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // current type we just specify fewer bytes since the LSByte 14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // is first... 146cd548034fa23113e995b8463d14f910ba2f7298cGreg Clayton data.SetData((uint8_t*)&m_data, limit_byte_size, lldb::endian::InlHostByteOrder()); 14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 148cd548034fa23113e995b8463d14f910ba2f7298cGreg Clayton else if (lldb::endian::InlHostByteOrder() == eByteOrderBig) 14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // On big endian systems if we want fewer bytes from the 15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // current type have to advance our initial byte pointer and 15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // trim down the number of bytes since the MSByte is first 153cd548034fa23113e995b8463d14f910ba2f7298cGreg Clayton data.SetData(((uint8_t*)&m_data) + byte_size - limit_byte_size, limit_byte_size, lldb::endian::InlHostByteOrder()); 15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 15624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 15724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // We want all of the data 159cd548034fa23113e995b8463d14f910ba2f7298cGreg Clayton data.SetData((uint8_t*)&m_data, byte_size, lldb::endian::InlHostByteOrder()); 16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return true; 16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner data.Clear(); 16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return false; 16524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 16724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnersize_t 16824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::GetByteSize() const 16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 17024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (m_type) 17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 17324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 17424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: return sizeof(m_data.sint); 17524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: return sizeof(m_data.uint); 17624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: return sizeof(m_data.slong); 17724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: return sizeof(m_data.ulong); 17824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: return sizeof(m_data.slonglong); 17924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: return sizeof(m_data.ulonglong); 18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: return sizeof(m_data.flt); 18124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: return sizeof(m_data.dbl); 18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: return sizeof(m_data.ldbl); 18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return 0; 18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::IsZero() const 18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (m_type) 19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 19224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 19424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: return m_data.sint == 0; 19524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: return m_data.uint == 0; 19624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: return m_data.slong == 0; 19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: return m_data.ulong == 0; 19824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: return m_data.slonglong == 0; 19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: return m_data.ulonglong == 0; 20024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: return m_data.flt == 0.0f; 20124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: return m_data.dbl == 0.0; 20224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: return m_data.ldbl == 0.0; 20324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 20424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return false; 20524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 20624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid 20824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::GetValue (Stream *s, bool show_type) const 20924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 21024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (show_type) 21124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner s->Printf("(%s) ", GetTypeAsCString()); 21224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 21324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (m_type) 21424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 21524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: s->Printf("%i", m_data.sint); break; 21824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: s->Printf("0x%8.8x", m_data.uint); break; 21924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: s->Printf("%li", m_data.slong); break; 22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: s->Printf("0x%8.8lx", m_data.ulong); break; 22124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: s->Printf("%lli", m_data.slonglong); break; 22224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: s->Printf("0x%16.16llx", m_data.ulonglong); break; 22324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: s->Printf("%f", m_data.flt); break; 22424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: s->Printf("%g", m_data.dbl); break; 22524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: s->Printf("%Lg", m_data.ldbl); break; 22624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 22724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 22824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 22924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst char * 23024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::GetTypeAsCString() const 23124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 23224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (m_type) 23324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 23424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: return "void"; 23524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: return "int"; 23624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: return "unsigned int"; 23724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: return "long"; 23824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: return "unsigned long"; 23924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: return "long long"; 24024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: return "unsigned long long"; 24124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: return "float"; 24224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: return "double"; 24324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: return "long double"; 24424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 24524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return "<invalid Scalar type>"; 24624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 24724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 24824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 24924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 25024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 25124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Scalar copy constructor 25224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 25324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar& 25424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::operator=(const Scalar& rhs) 25524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 25624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (this != &rhs) 25724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 25824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = rhs.m_type; 25924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ::memcpy (&m_data, &rhs.m_data, sizeof(m_data)); 26024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 26124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return *this; 26224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 26324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 26424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar& 26524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::operator= (const int v) 26624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 26724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = e_sint; 26824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_data.sint = v; 26924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return *this; 27024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 27124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 27224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 27324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar& 27424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::operator= (unsigned int v) 27524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 27624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = e_uint; 27724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_data.uint = v; 27824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return *this; 27924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 28024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 28124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar& 28224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::operator= (long v) 28324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 28424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = e_slong; 28524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_data.slong = v; 28624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return *this; 28724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 28824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 28924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar& 29024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::operator= (unsigned long v) 29124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 29224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = e_ulong; 29324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_data.ulong = v; 29424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return *this; 29524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 29624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 29724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar& 29824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::operator= (long long v) 29924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 30024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = e_slonglong; 30124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_data.slonglong = v; 30224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return *this; 30324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 30424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 30524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar& 30624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::operator= (unsigned long long v) 30724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 30824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = e_ulonglong; 30924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_data.ulonglong = v; 31024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return *this; 31124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 31224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 31324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar& 31424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::operator= (float v) 31524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 31624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = e_float; 31724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_data.flt = v; 31824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return *this; 31924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 32024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 32124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar& 32224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::operator= (double v) 32324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 32424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = e_double; 32524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_data.dbl = v; 32624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return *this; 32724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 32824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 32924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar& 33024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::operator= (long double v) 33124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 33224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = e_long_double; 33324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_data.ldbl = v; 33424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return *this; 33524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 33624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 33724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 33824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Destructor 33924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 34024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::~Scalar() 34124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 34224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 34324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 34424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 34524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::Promote(Scalar::Type type) 34624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 34724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool success = false; 34824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (m_type) 34924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 35024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 35124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 35224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 35324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: 35424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (type) 35524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 35624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: break; 35724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: success = true; break; 35824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: m_data.uint = m_data.sint; success = true; break; 35924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: m_data.slong = m_data.sint; success = true; break; 36024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: m_data.ulong = m_data.sint; success = true; break; 36124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: m_data.slonglong = m_data.sint; success = true; break; 36224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: m_data.ulonglong = m_data.sint; success = true; break; 36324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: m_data.flt = m_data.sint; success = true; break; 36424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: m_data.dbl = m_data.sint; success = true; break; 36524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: m_data.ldbl = m_data.sint; success = true; break; 36624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 36724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 36824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 36924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: 37024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (type) 37124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 37224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 37324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: break; 37424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: success = true; break; 37524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: m_data.slong = m_data.uint; success = true; break; 37624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: m_data.ulong = m_data.uint; success = true; break; 37724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: m_data.slonglong = m_data.uint; success = true; break; 37824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: m_data.ulonglong = m_data.uint; success = true; break; 37924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: m_data.flt = m_data.uint; success = true; break; 38024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: m_data.dbl = m_data.uint; success = true; break; 38124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: m_data.ldbl = m_data.uint; success = true; break; 38224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 38324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 38424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 38524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: 38624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (type) 38724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 38824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 38924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: 39024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: break; 39124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: success = true; break; 39224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: m_data.ulong = m_data.slong; success = true; break; 39324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: m_data.slonglong = m_data.slong; success = true; break; 39424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: m_data.ulonglong = m_data.slong; success = true; break; 39524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: m_data.flt = m_data.slong; success = true; break; 39624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: m_data.dbl = m_data.slong; success = true; break; 39724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: m_data.ldbl = m_data.slong; success = true; break; 39824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 39924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 40024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 40124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: 40224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (type) 40324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 40424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 40524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: 40624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: 40724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: break; 40824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: success = true; break; 40924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: m_data.slonglong = m_data.ulong; success = true; break; 41024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: m_data.ulonglong = m_data.ulong; success = true; break; 41124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: m_data.flt = m_data.ulong; success = true; break; 41224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: m_data.dbl = m_data.ulong; success = true; break; 41324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: m_data.ldbl = m_data.ulong; success = true; break; 41424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 41524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 41624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 41724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: 41824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (type) 41924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 42024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 42124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: 42224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: 42324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: 42424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: break; 42524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: success = true; break; 42624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: m_data.ulonglong = m_data.slonglong; success = true; break; 42724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: m_data.flt = m_data.slonglong; success = true; break; 42824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: m_data.dbl = m_data.slonglong; success = true; break; 42924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: m_data.ldbl = m_data.slonglong; success = true; break; 43024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 43124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 43224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 43324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: 43424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (type) 43524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 43624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 43724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: 43824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: 43924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: 44024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: 44124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: break; 44224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: success = true; break; 44324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: m_data.flt = m_data.ulonglong; success = true; break; 44424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: m_data.dbl = m_data.ulonglong; success = true; break; 44524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: m_data.ldbl = m_data.ulonglong; success = true; break; 44624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 44724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 44824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 44924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: 45024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (type) 45124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 45224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 45324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: 45424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: 45524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: 45624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: 45724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: 45824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: break; 45924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: success = true; break; 46024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: m_data.dbl = m_data.flt; success = true; break; 46124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: m_data.ldbl = m_data.ulonglong; success = true; break; 46224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 46324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 46424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 46524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: 46624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (type) 46724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 46824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 46924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: 47024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: 47124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: 47224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: 47324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: 47424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: 47524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: break; 47624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: success = true; break; 47724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: m_data.ldbl = m_data.dbl; success = true; break; 47824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 47924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 48024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 48124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: 48224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (type) 48324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 48424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 48524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: 48624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: 48724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: 48824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: 48924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: 49024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: 49124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: 49224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: break; 49324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: success = true; break; 49424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 49524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 49624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 49724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 49824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (success) 49924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = type; 50024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return success; 50124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 50224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 50324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst char * 50424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::GetValueTypeAsCString (Scalar::Type type) 50524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 50624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (type) 50724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 50824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: return "void"; 50924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: return "int"; 51024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: return "unsigned int"; 51124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: return "long"; 51224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: return "unsigned long"; 51324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: return "long long"; 51424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: return "unsigned long long"; 51524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: return "float"; 51624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: return "double"; 51724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: return "long double"; 51824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 51924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return "???"; 52024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 52124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 52224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 52324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::Type 52424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::GetValueTypeForSignedIntegerWithByteSize (size_t byte_size) 52524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 52636da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton if (byte_size <= sizeof(sint_t)) 52724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return e_sint; 52836da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton if (byte_size <= sizeof(slong_t)) 52924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return e_slong; 53036da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton if (byte_size <= sizeof(slonglong_t)) 53124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return e_slonglong; 53224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return e_void; 53324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 53424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 53524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::Type 53624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::GetValueTypeForUnsignedIntegerWithByteSize (size_t byte_size) 53724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 53836da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton if (byte_size <= sizeof(uint_t)) 53924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return e_uint; 54036da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton if (byte_size <= sizeof(ulong_t)) 54124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return e_ulong; 54236da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton if (byte_size <= sizeof(ulonglong_t)) 54324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return e_ulonglong; 54424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return e_void; 54524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 54624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 54724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::Type 54824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::GetValueTypeForFloatWithByteSize (size_t byte_size) 54924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 55036da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton if (byte_size == sizeof(float_t)) 55124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return e_float; 55236da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton if (byte_size == sizeof(double_t)) 55324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return e_double; 55436da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton if (byte_size == sizeof(long_double_t)) 55524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return e_long_double; 55624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return e_void; 55724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 55824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 55924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 56024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::Cast(Scalar::Type type) 56124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 56224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool success = false; 56324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (m_type) 56424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 56524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 56624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 56724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 56824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: 56924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (type) 57024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 57124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: break; 57224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: success = true; break; 57324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: m_data.uint = m_data.sint; success = true; break; 57424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: m_data.slong = m_data.sint; success = true; break; 57524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: m_data.ulong = m_data.sint; success = true; break; 57624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: m_data.slonglong = m_data.sint; success = true; break; 57724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: m_data.ulonglong = m_data.sint; success = true; break; 57824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: m_data.flt = m_data.sint; success = true; break; 57924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: m_data.dbl = m_data.sint; success = true; break; 58024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: m_data.ldbl = m_data.sint; success = true; break; 58124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 58224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 58324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 58424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: 58524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (type) 58624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 58724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 58824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: m_data.sint = m_data.uint; success = true; break; 58924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: success = true; break; 59024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: m_data.slong = m_data.uint; success = true; break; 59124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: m_data.ulong = m_data.uint; success = true; break; 59224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: m_data.slonglong = m_data.uint; success = true; break; 59324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: m_data.ulonglong = m_data.uint; success = true; break; 59424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: m_data.flt = m_data.uint; success = true; break; 59524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: m_data.dbl = m_data.uint; success = true; break; 59624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: m_data.ldbl = m_data.uint; success = true; break; 59724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 59824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 59924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 60024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: 60124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (type) 60224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 60324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 60436da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton case e_sint: m_data.sint = (sint_t)m_data.slong; success = true; break; 60536da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton case e_uint: m_data.uint = (uint_t)m_data.slong; success = true; break; 60624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: success = true; break; 60724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: m_data.ulong = m_data.slong; success = true; break; 60824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: m_data.slonglong = m_data.slong; success = true; break; 60924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: m_data.ulonglong = m_data.slong; success = true; break; 61024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: m_data.flt = m_data.slong; success = true; break; 61124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: m_data.dbl = m_data.slong; success = true; break; 61224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: m_data.ldbl = m_data.slong; success = true; break; 61324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 61424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 61524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 61624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: 61724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (type) 61824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 61924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 62036da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton case e_sint: m_data.sint = (sint_t)m_data.ulong; success = true; break; 62136da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton case e_uint: m_data.uint = (uint_t)m_data.ulong; success = true; break; 62224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: m_data.slong = m_data.ulong; success = true; break; 62324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: success = true; break; 62424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: m_data.slonglong = m_data.ulong; success = true; break; 62524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: m_data.ulonglong = m_data.ulong; success = true; break; 62624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: m_data.flt = m_data.ulong; success = true; break; 62724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: m_data.dbl = m_data.ulong; success = true; break; 62824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: m_data.ldbl = m_data.ulong; success = true; break; 62924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 63024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 63124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 63224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: 63324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (type) 63424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 63524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 63636da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton case e_sint: m_data.sint = (sint_t)m_data.slonglong; success = true; break; 63736da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton case e_uint: m_data.uint = (uint_t)m_data.slonglong; success = true; break; 63824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: m_data.slong = m_data.slonglong; success = true; break; 63924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: m_data.ulong = m_data.slonglong; success = true; break; 64024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: success = true; break; 64124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: m_data.ulonglong = m_data.slonglong; success = true; break; 64224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: m_data.flt = m_data.slonglong; success = true; break; 64324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: m_data.dbl = m_data.slonglong; success = true; break; 64424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: m_data.ldbl = m_data.slonglong; success = true; break; 64524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 64624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 64724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 64824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: 64924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (type) 65024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 65124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 65236da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton case e_sint: m_data.sint = (sint_t)m_data.ulonglong; success = true; break; 65336da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton case e_uint: m_data.uint = (uint_t)m_data.ulonglong; success = true; break; 65424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: m_data.slong = m_data.ulonglong; success = true; break; 65524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: m_data.ulong = m_data.ulonglong; success = true; break; 65624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: m_data.slonglong = m_data.ulonglong; success = true; break; 65724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: success = true; break; 65824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: m_data.flt = m_data.ulonglong; success = true; break; 65924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: m_data.dbl = m_data.ulonglong; success = true; break; 66024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: m_data.ldbl = m_data.ulonglong; success = true; break; 66124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 66224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 66324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 66424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: 66524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (type) 66624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 66724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 66836da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton case e_sint: m_data.sint = (sint_t)m_data.flt; success = true; break; 66936da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton case e_uint: m_data.uint = (uint_t)m_data.flt; success = true; break; 67036da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton case e_slong: m_data.slong = (slong_t)m_data.flt; success = true; break; 67136da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton case e_ulong: m_data.ulong = (ulong_t)m_data.flt; success = true; break; 67236da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton case e_slonglong: m_data.slonglong = (slonglong_t)m_data.flt; success = true; break; 67336da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton case e_ulonglong: m_data.ulonglong = (ulonglong_t)m_data.flt; success = true; break; 67424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: success = true; break; 67536da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton case e_double: m_data.dbl = m_data.flt; success = true; break; 67636da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton case e_long_double: m_data.ldbl = m_data.flt; success = true; break; 67724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 67824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 67924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 68024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: 68124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (type) 68224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 68324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 68436da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton case e_sint: m_data.sint = (sint_t)m_data.dbl; success = true; break; 68536da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton case e_uint: m_data.uint = (uint_t)m_data.dbl; success = true; break; 68636da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton case e_slong: m_data.slong = (slong_t)m_data.dbl; success = true; break; 68736da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton case e_ulong: m_data.ulong = (ulong_t)m_data.dbl; success = true; break; 68836da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton case e_slonglong: m_data.slonglong = (slonglong_t)m_data.dbl; success = true; break; 68936da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton case e_ulonglong: m_data.ulonglong = (ulonglong_t)m_data.dbl; success = true; break; 69036da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton case e_float: m_data.flt = (float_t)m_data.dbl; success = true; break; 69124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: success = true; break; 69236da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton case e_long_double: m_data.ldbl = m_data.dbl; success = true; break; 69324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 69424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 69524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 69624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: 69724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (type) 69824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 69924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 70036da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton case e_sint: m_data.sint = (sint_t)m_data.ldbl; success = true; break; 70136da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton case e_uint: m_data.uint = (uint_t)m_data.ldbl; success = true; break; 70236da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton case e_slong: m_data.slong = (slong_t)m_data.ldbl; success = true; break; 70336da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton case e_ulong: m_data.ulong = (ulong_t)m_data.ldbl; success = true; break; 70436da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton case e_slonglong: m_data.slonglong = (slonglong_t)m_data.ldbl; success = true; break; 70536da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton case e_ulonglong: m_data.ulonglong = (ulonglong_t)m_data.ldbl; success = true; break; 70636da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton case e_float: m_data.flt = (float_t)m_data.ldbl; success = true; break; 70736da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton case e_double: m_data.dbl = (double_t)m_data.ldbl; success = true; break; 70824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: success = true; break; 70924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 71024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 71124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 71224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 71324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (success) 71424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = type; 71524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return success; 71624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 71724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 718b50a2f360d56729c9b1082a45ec91faf7448a725Sean Callananbool 719b50a2f360d56729c9b1082a45ec91faf7448a725Sean CallananScalar::MakeSigned () 720b50a2f360d56729c9b1082a45ec91faf7448a725Sean Callanan{ 721b50a2f360d56729c9b1082a45ec91faf7448a725Sean Callanan bool success = false; 722b50a2f360d56729c9b1082a45ec91faf7448a725Sean Callanan 723b50a2f360d56729c9b1082a45ec91faf7448a725Sean Callanan switch (m_type) 724b50a2f360d56729c9b1082a45ec91faf7448a725Sean Callanan { 725b50a2f360d56729c9b1082a45ec91faf7448a725Sean Callanan case e_void: break; 726b50a2f360d56729c9b1082a45ec91faf7448a725Sean Callanan case e_sint: success = true; break; 727b50a2f360d56729c9b1082a45ec91faf7448a725Sean Callanan case e_uint: m_type = e_sint; success = true; break; 728b50a2f360d56729c9b1082a45ec91faf7448a725Sean Callanan case e_slong: success = true; break; 729b50a2f360d56729c9b1082a45ec91faf7448a725Sean Callanan case e_ulong: m_type = e_slong; success = true; break; 730b50a2f360d56729c9b1082a45ec91faf7448a725Sean Callanan case e_slonglong: success = true; break; 731b50a2f360d56729c9b1082a45ec91faf7448a725Sean Callanan case e_ulonglong: m_type = e_slonglong; success = true; break; 732b50a2f360d56729c9b1082a45ec91faf7448a725Sean Callanan case e_float: success = true; break; 733b50a2f360d56729c9b1082a45ec91faf7448a725Sean Callanan case e_double: success = true; break; 734b50a2f360d56729c9b1082a45ec91faf7448a725Sean Callanan case e_long_double: success = true; break; 735b50a2f360d56729c9b1082a45ec91faf7448a725Sean Callanan } 736b50a2f360d56729c9b1082a45ec91faf7448a725Sean Callanan 737b50a2f360d56729c9b1082a45ec91faf7448a725Sean Callanan return success; 738b50a2f360d56729c9b1082a45ec91faf7448a725Sean Callanan} 739b50a2f360d56729c9b1082a45ec91faf7448a725Sean Callanan 74024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerint 74124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::SInt(int fail_value) const 74224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 74324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (m_type) 74424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 74524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: break; 74624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: return m_data.sint; 74724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: return (int)m_data.uint; 74824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: return (int)m_data.slong; 74924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: return (int)m_data.ulong; 75024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: return (int)m_data.slonglong; 75124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: return (int)m_data.ulonglong; 75224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: return (int)m_data.flt; 75324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: return (int)m_data.dbl; 75424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: return (int)m_data.ldbl; 75524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 75624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return fail_value; 75724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 75824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 75924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerunsigned int 76024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::UInt(unsigned int fail_value) const 76124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 76224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (m_type) 76324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 76424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: break; 765671dd558650c457d54f124a58db91b0e26802399Enrico Granata case e_sint: return (unsigned int)m_data.sint; 76624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: return (unsigned int)m_data.uint; 767671dd558650c457d54f124a58db91b0e26802399Enrico Granata case e_slong: return (unsigned int)m_data.slong; 76824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: return (unsigned int)m_data.ulong; 769671dd558650c457d54f124a58db91b0e26802399Enrico Granata case e_slonglong: return (unsigned int)m_data.slonglong; 77024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: return (unsigned int)m_data.ulonglong; 77124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: return (unsigned int)m_data.flt; 77224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: return (unsigned int)m_data.dbl; 77324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: return (unsigned int)m_data.ldbl; 77424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 77524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return fail_value; 77624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 77724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 77824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 77924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlong 78024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::SLong(long fail_value) const 78124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 78224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (m_type) 78324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 78424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: break; 78524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: return (long)m_data.sint; 78624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: return (long)m_data.uint; 78724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: return (long)m_data.slong; 78824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: return (long)m_data.ulong; 78924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: return (long)m_data.slonglong; 79024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: return (long)m_data.ulonglong; 79124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: return (long)m_data.flt; 79224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: return (long)m_data.dbl; 79324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: return (long)m_data.ldbl; 79424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 79524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return fail_value; 79624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 79724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 79824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 79924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 80024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerunsigned long 80124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::ULong(unsigned long fail_value) const 80224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 80324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (m_type) 80424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 80524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: break; 806671dd558650c457d54f124a58db91b0e26802399Enrico Granata case e_sint: return (unsigned long)m_data.sint; 80724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: return (unsigned long)m_data.uint; 808671dd558650c457d54f124a58db91b0e26802399Enrico Granata case e_slong: return (unsigned long)m_data.slong; 80924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: return (unsigned long)m_data.ulong; 810671dd558650c457d54f124a58db91b0e26802399Enrico Granata case e_slonglong: return (unsigned long)m_data.slonglong; 81124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: return (unsigned long)m_data.ulonglong; 81224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: return (unsigned long)m_data.flt; 81324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: return (unsigned long)m_data.dbl; 81424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: return (unsigned long)m_data.ldbl; 81524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 81624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return fail_value; 81724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 81824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 81924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattneruint64_t 82024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::GetRawBits64(uint64_t fail_value) const 82124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 82224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (m_type) 82324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 82424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 82524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 82624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 82724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: 82824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: 82924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_data.uint; 83024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 83124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: 83224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: 83324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_data.ulong; 83424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 83524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: 83624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: 83724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_data.ulonglong; 83824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 83924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: 84036da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton if (sizeof(m_data.flt) == sizeof(m_data.uint)) 84124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_data.uint; 84236da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton else if (sizeof(m_data.flt) == sizeof(m_data.ulong)) 84324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_data.ulong; 84436da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton else if (sizeof(m_data.flt) == sizeof(m_data.ulonglong)) 84524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_data.ulonglong; 84624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 84724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 84824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: 84936da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton if (sizeof(m_data.dbl) == sizeof(m_data.uint)) 85024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_data.uint; 85136da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton else if (sizeof(m_data.dbl) == sizeof(m_data.ulong)) 85224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_data.ulong; 85336da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton else if (sizeof(m_data.dbl) == sizeof(m_data.ulonglong)) 85424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_data.ulonglong; 85524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 85624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 85724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: 85836da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton if (sizeof(m_data.ldbl) == sizeof(m_data.uint)) 85924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_data.uint; 86036da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton else if (sizeof(m_data.ldbl) == sizeof(m_data.ulong)) 86124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_data.ulong; 86236da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton else if (sizeof(m_data.ldbl) == sizeof(m_data.ulonglong)) 86324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_data.ulonglong; 86424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 86524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 86624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return fail_value; 86724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 86824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 86924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 87024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 87124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlong long 87224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::SLongLong(long long fail_value) const 87324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 87424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (m_type) 87524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 87624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: break; 87724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: return (long long)m_data.sint; 87824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: return (long long)m_data.uint; 87924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: return (long long)m_data.slong; 88024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: return (long long)m_data.ulong; 88124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: return (long long)m_data.slonglong; 88224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: return (long long)m_data.ulonglong; 88324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: return (long long)m_data.flt; 88424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: return (long long)m_data.dbl; 88524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: return (long long)m_data.ldbl; 88624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 88724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return fail_value; 88824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 88924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 89024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 89124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerunsigned long long 89224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::ULongLong(unsigned long long fail_value) const 89324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 89424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (m_type) 89524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 89624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: break; 897671dd558650c457d54f124a58db91b0e26802399Enrico Granata case e_sint: return (unsigned long long)m_data.sint; 89824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: return (unsigned long long)m_data.uint; 899671dd558650c457d54f124a58db91b0e26802399Enrico Granata case e_slong: return (unsigned long long)m_data.slong; 90024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: return (unsigned long long)m_data.ulong; 901671dd558650c457d54f124a58db91b0e26802399Enrico Granata case e_slonglong: return (unsigned long long)m_data.slonglong; 90224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: return (unsigned long long)m_data.ulonglong; 90324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: return (unsigned long long)m_data.flt; 90424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: return (unsigned long long)m_data.dbl; 90524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: return (unsigned long long)m_data.ldbl; 90624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 90724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return fail_value; 90824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 90924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 91024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 91124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerfloat 91224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::Float(float fail_value) const 91324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 91424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (m_type) 91524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 91624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: break; 91724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: return (float)m_data.sint; 91824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: return (float)m_data.uint; 91924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: return (float)m_data.slong; 92024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: return (float)m_data.ulong; 92124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: return (float)m_data.slonglong; 92224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: return (float)m_data.ulonglong; 92324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: return (float)m_data.flt; 92424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: return (float)m_data.dbl; 92524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: return (float)m_data.ldbl; 92624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 92724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return fail_value; 92824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 92924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 93024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 93124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerdouble 93224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::Double(double fail_value) const 93324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 93424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (m_type) 93524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 93624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: break; 93724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: return (double)m_data.sint; 93824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: return (double)m_data.uint; 93924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: return (double)m_data.slong; 94024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: return (double)m_data.ulong; 94124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: return (double)m_data.slonglong; 94224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: return (double)m_data.ulonglong; 94324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: return (double)m_data.flt; 94424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: return (double)m_data.dbl; 94524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: return (double)m_data.ldbl; 94624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 94724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return fail_value; 94824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 94924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 95024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 95124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlong double 95224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::LongDouble(long double fail_value) const 95324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 95424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (m_type) 95524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 95624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: break; 95724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: return (long double)m_data.sint; 95824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: return (long double)m_data.uint; 95924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: return (long double)m_data.slong; 96024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: return (long double)m_data.ulong; 96124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: return (long double)m_data.slonglong; 96224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: return (long double)m_data.ulonglong; 96324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: return (long double)m_data.flt; 96424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: return (long double)m_data.dbl; 96524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: return (long double)m_data.ldbl; 96624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 96724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return fail_value; 96824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 96924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 97024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 97124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar& 97224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::operator+= (const Scalar& rhs) 97324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 97424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Scalar temp_value; 97524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Scalar* a; 97624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Scalar* b; 97724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if ((m_type = PromoteToMaxType(*this, rhs, temp_value, a, b)) != Scalar::e_void) 97824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 97924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (m_type) 98024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 98124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: break; 98224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: m_data.sint = a->m_data.sint + b->m_data.sint; break; 98324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: m_data.uint = a->m_data.uint + b->m_data.uint; break; 98424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: m_data.slong = a->m_data.slong + b->m_data.slong; break; 98524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: m_data.ulong = a->m_data.ulong + b->m_data.ulong; break; 98624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: m_data.slonglong = a->m_data.slonglong + b->m_data.slonglong; break; 98724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: m_data.ulonglong = a->m_data.ulonglong + b->m_data.ulonglong; break; 98824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: m_data.flt = a->m_data.flt + b->m_data.flt; break; 98924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: m_data.dbl = a->m_data.dbl + b->m_data.dbl; break; 99024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: m_data.ldbl = a->m_data.ldbl + b->m_data.ldbl; break; 99124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 99224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 99324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return *this; 99424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 99524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 99624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar& 99724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::operator<<= (const Scalar& rhs) 99824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 99924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (m_type) 100024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 100124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 100224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: 100324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: 100424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: 100524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = e_void; 100624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 100724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 100824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: 100924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (rhs.m_type) 101024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 101124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 101224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: 101324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: 101424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: 101524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = e_void; 101624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 101724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: m_data.sint <<= rhs.m_data.sint; break; 101824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: m_data.sint <<= rhs.m_data.uint; break; 101924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: m_data.sint <<= rhs.m_data.slong; break; 102024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: m_data.sint <<= rhs.m_data.ulong; break; 102124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: m_data.sint <<= rhs.m_data.slonglong; break; 102224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: m_data.sint <<= rhs.m_data.ulonglong; break; 102324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 102424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 102524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 102624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: 102724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (rhs.m_type) 102824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 102924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 103024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: 103124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: 103224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: 103324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = e_void; 103424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 103524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: m_data.uint <<= rhs.m_data.sint; break; 103624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: m_data.uint <<= rhs.m_data.uint; break; 103724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: m_data.uint <<= rhs.m_data.slong; break; 103824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: m_data.uint <<= rhs.m_data.ulong; break; 103924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: m_data.uint <<= rhs.m_data.slonglong; break; 104024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: m_data.uint <<= rhs.m_data.ulonglong; break; 104124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 104224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 104324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 104424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: 104524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (rhs.m_type) 104624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 104724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 104824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: 104924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: 105024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: 105124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = e_void; 105224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 105324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: m_data.slong <<= rhs.m_data.sint; break; 105424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: m_data.slong <<= rhs.m_data.uint; break; 105524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: m_data.slong <<= rhs.m_data.slong; break; 105624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: m_data.slong <<= rhs.m_data.ulong; break; 105724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: m_data.slong <<= rhs.m_data.slonglong; break; 105824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: m_data.slong <<= rhs.m_data.ulonglong; break; 105924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 106024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 106124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 106224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: 106324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (rhs.m_type) 106424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 106524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 106624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: 106724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: 106824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: 106924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = e_void; 107024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 107124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: m_data.ulong <<= rhs.m_data.sint; break; 107224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: m_data.ulong <<= rhs.m_data.uint; break; 107324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: m_data.ulong <<= rhs.m_data.slong; break; 107424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: m_data.ulong <<= rhs.m_data.ulong; break; 107524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: m_data.ulong <<= rhs.m_data.slonglong; break; 107624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: m_data.ulong <<= rhs.m_data.ulonglong; break; 107724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 107824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 107924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: 108024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (rhs.m_type) 108124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 108224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 108324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: 108424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: 108524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: 108624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = e_void; 108724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 108824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: m_data.slonglong <<= rhs.m_data.sint; break; 108924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: m_data.slonglong <<= rhs.m_data.uint; break; 109024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: m_data.slonglong <<= rhs.m_data.slong; break; 109124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: m_data.slonglong <<= rhs.m_data.ulong; break; 109224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: m_data.slonglong <<= rhs.m_data.slonglong; break; 109324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: m_data.slonglong <<= rhs.m_data.ulonglong; break; 109424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 109524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 109624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 109724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: 109824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (rhs.m_type) 109924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 110024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 110124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: 110224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: 110324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: 110424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = e_void; 110524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 110624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: m_data.ulonglong <<= rhs.m_data.sint; break; 110724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: m_data.ulonglong <<= rhs.m_data.uint; break; 110824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: m_data.ulonglong <<= rhs.m_data.slong; break; 110924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: m_data.ulonglong <<= rhs.m_data.ulong; break; 111024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: m_data.ulonglong <<= rhs.m_data.slonglong; break; 111124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: m_data.ulonglong <<= rhs.m_data.ulonglong; break; 111224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 111324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 111424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 111524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return *this; 111624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 111724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 111824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 111924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::ShiftRightLogical(const Scalar& rhs) 112024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 112124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (m_type) 112224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 112324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 112424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: 112524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: 112624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: 112724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = e_void; 112824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 112924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 113024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: 113124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: 113224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (rhs.m_type) 113324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 113424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 113524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: 113624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: 113724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: 113824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = e_void; 113924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 114024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: m_data.uint >>= rhs.m_data.sint; break; 114124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: m_data.uint >>= rhs.m_data.uint; break; 114224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: m_data.uint >>= rhs.m_data.slong; break; 114324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: m_data.uint >>= rhs.m_data.ulong; break; 114424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: m_data.uint >>= rhs.m_data.slonglong; break; 114524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: m_data.uint >>= rhs.m_data.ulonglong; break; 114624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 114724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 114824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 114924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: 115024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: 115124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (rhs.m_type) 115224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 115324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 115424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: 115524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: 115624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: 115724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = e_void; 115824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 115924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: m_data.ulong >>= rhs.m_data.sint; break; 116024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: m_data.ulong >>= rhs.m_data.uint; break; 116124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: m_data.ulong >>= rhs.m_data.slong; break; 116224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: m_data.ulong >>= rhs.m_data.ulong; break; 116324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: m_data.ulong >>= rhs.m_data.slonglong; break; 116424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: m_data.ulong >>= rhs.m_data.ulonglong; break; 116524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 116624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 116724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 116824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: 116924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: 117024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (rhs.m_type) 117124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 117224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 117324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: 117424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: 117524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: 117624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = e_void; 117724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 117824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: m_data.ulonglong >>= rhs.m_data.sint; break; 117924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: m_data.ulonglong >>= rhs.m_data.uint; break; 118024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: m_data.ulonglong >>= rhs.m_data.slong; break; 118124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: m_data.ulonglong >>= rhs.m_data.ulong; break; 118224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: m_data.ulonglong >>= rhs.m_data.slonglong; break; 118324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: m_data.ulonglong >>= rhs.m_data.ulonglong; break; 118424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 118524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 118624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 118724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_type != e_void; 118824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 118924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 119024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 119124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar& 119224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::operator>>= (const Scalar& rhs) 119324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 119424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (m_type) 119524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 119624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 119724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: 119824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: 119924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: 120024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = e_void; 120124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 120224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 120324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: 120424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (rhs.m_type) 120524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 120624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 120724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: 120824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: 120924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: 121024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = e_void; 121124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 121224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: m_data.sint >>= rhs.m_data.sint; break; 121324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: m_data.sint >>= rhs.m_data.uint; break; 121424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: m_data.sint >>= rhs.m_data.slong; break; 121524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: m_data.sint >>= rhs.m_data.ulong; break; 121624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: m_data.sint >>= rhs.m_data.slonglong; break; 121724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: m_data.sint >>= rhs.m_data.ulonglong; break; 121824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 121924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 122024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 122124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: 122224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (rhs.m_type) 122324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 122424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 122524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: 122624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: 122724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: 122824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = e_void; 122924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 123024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: m_data.uint >>= rhs.m_data.sint; break; 123124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: m_data.uint >>= rhs.m_data.uint; break; 123224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: m_data.uint >>= rhs.m_data.slong; break; 123324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: m_data.uint >>= rhs.m_data.ulong; break; 123424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: m_data.uint >>= rhs.m_data.slonglong; break; 123524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: m_data.uint >>= rhs.m_data.ulonglong; break; 123624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 123724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 123824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 123924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: 124024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (rhs.m_type) 124124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 124224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 124324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: 124424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: 124524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: 124624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = e_void; 124724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 124824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: m_data.slong >>= rhs.m_data.sint; break; 124924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: m_data.slong >>= rhs.m_data.uint; break; 125024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: m_data.slong >>= rhs.m_data.slong; break; 125124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: m_data.slong >>= rhs.m_data.ulong; break; 125224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: m_data.slong >>= rhs.m_data.slonglong; break; 125324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: m_data.slong >>= rhs.m_data.ulonglong; break; 125424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 125524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 125624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 125724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: 125824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (rhs.m_type) 125924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 126024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 126124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: 126224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: 126324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: 126424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = e_void; 126524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 126624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: m_data.ulong >>= rhs.m_data.sint; break; 126724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: m_data.ulong >>= rhs.m_data.uint; break; 126824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: m_data.ulong >>= rhs.m_data.slong; break; 126924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: m_data.ulong >>= rhs.m_data.ulong; break; 127024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: m_data.ulong >>= rhs.m_data.slonglong; break; 127124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: m_data.ulong >>= rhs.m_data.ulonglong; break; 127224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 127324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 127424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: 127524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (rhs.m_type) 127624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 127724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 127824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: 127924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: 128024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: 128124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = e_void; 128224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 128324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: m_data.slonglong >>= rhs.m_data.sint; break; 128424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: m_data.slonglong >>= rhs.m_data.uint; break; 128524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: m_data.slonglong >>= rhs.m_data.slong; break; 128624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: m_data.slonglong >>= rhs.m_data.ulong; break; 128724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: m_data.slonglong >>= rhs.m_data.slonglong; break; 128824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: m_data.slonglong >>= rhs.m_data.ulonglong; break; 128924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 129024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 129124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 129224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: 129324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (rhs.m_type) 129424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 129524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 129624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: 129724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: 129824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: 129924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = e_void; 130024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 130124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: m_data.ulonglong >>= rhs.m_data.sint; break; 130224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: m_data.ulonglong >>= rhs.m_data.uint; break; 130324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: m_data.ulonglong >>= rhs.m_data.slong; break; 130424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: m_data.ulonglong >>= rhs.m_data.ulong; break; 130524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: m_data.ulonglong >>= rhs.m_data.slonglong; break; 130624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: m_data.ulonglong >>= rhs.m_data.ulonglong; break; 130724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 130824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 130924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 131024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return *this; 131124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 131224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 131324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 131424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar& 131524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::operator&= (const Scalar& rhs) 131624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 131724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (m_type) 131824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 131924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 132024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: 132124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: 132224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: 132324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = e_void; 132424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 132524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 132624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: 132724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (rhs.m_type) 132824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 132924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 133024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: 133124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: 133224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: 133324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = e_void; 133424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 133524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: m_data.sint &= rhs.m_data.sint; break; 133624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: m_data.sint &= rhs.m_data.uint; break; 133724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: m_data.sint &= rhs.m_data.slong; break; 133824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: m_data.sint &= rhs.m_data.ulong; break; 133924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: m_data.sint &= rhs.m_data.slonglong; break; 134024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: m_data.sint &= rhs.m_data.ulonglong; break; 134124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 134224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 134324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 134424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: 134524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (rhs.m_type) 134624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 134724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 134824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: 134924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: 135024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: 135124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = e_void; 135224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 135324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: m_data.uint &= rhs.m_data.sint; break; 135424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: m_data.uint &= rhs.m_data.uint; break; 135524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: m_data.uint &= rhs.m_data.slong; break; 135624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: m_data.uint &= rhs.m_data.ulong; break; 135724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: m_data.uint &= rhs.m_data.slonglong; break; 135824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: m_data.uint &= rhs.m_data.ulonglong; break; 135924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 136024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 136124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 136224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: 136324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (rhs.m_type) 136424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 136524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 136624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: 136724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: 136824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: 136924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = e_void; 137024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 137124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: m_data.slong &= rhs.m_data.sint; break; 137224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: m_data.slong &= rhs.m_data.uint; break; 137324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: m_data.slong &= rhs.m_data.slong; break; 137424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: m_data.slong &= rhs.m_data.ulong; break; 137524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: m_data.slong &= rhs.m_data.slonglong; break; 137624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: m_data.slong &= rhs.m_data.ulonglong; break; 137724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 137824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 137924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 138024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: 138124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (rhs.m_type) 138224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 138324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 138424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: 138524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: 138624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: 138724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = e_void; 138824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 138924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: m_data.ulong &= rhs.m_data.sint; break; 139024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: m_data.ulong &= rhs.m_data.uint; break; 139124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: m_data.ulong &= rhs.m_data.slong; break; 139224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: m_data.ulong &= rhs.m_data.ulong; break; 139324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: m_data.ulong &= rhs.m_data.slonglong; break; 139424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: m_data.ulong &= rhs.m_data.ulonglong; break; 139524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 139624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 139724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: 139824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (rhs.m_type) 139924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 140024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 140124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: 140224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: 140324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: 140424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = e_void; 140524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 140624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: m_data.slonglong &= rhs.m_data.sint; break; 140724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: m_data.slonglong &= rhs.m_data.uint; break; 140824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: m_data.slonglong &= rhs.m_data.slong; break; 140924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: m_data.slonglong &= rhs.m_data.ulong; break; 141024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: m_data.slonglong &= rhs.m_data.slonglong; break; 141124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: m_data.slonglong &= rhs.m_data.ulonglong; break; 141224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 141324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 141424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 141524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: 141624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (rhs.m_type) 141724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 141824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 141924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: 142024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: 142124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: 142224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = e_void; 142324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 142424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: m_data.ulonglong &= rhs.m_data.sint; break; 142524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: m_data.ulonglong &= rhs.m_data.uint; break; 142624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: m_data.ulonglong &= rhs.m_data.slong; break; 142724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: m_data.ulonglong &= rhs.m_data.ulong; break; 142824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: m_data.ulonglong &= rhs.m_data.slonglong; break; 142924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: m_data.ulonglong &= rhs.m_data.ulonglong; break; 143024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 143124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 143224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 143324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return *this; 143424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 143524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 143624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 143724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 143824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 143924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::AbsoluteValue() 144024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 144124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (m_type) 144224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 144324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 144424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 144524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 144624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: 144724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (m_data.sint < 0) 144824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_data.sint = -m_data.sint; 144924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return true; 145024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 145124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: 145224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (m_data.slong < 0) 145324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_data.slong = -m_data.slong; 145424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return true; 145524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 145624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: 145724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (m_data.slonglong < 0) 145824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_data.slonglong = -m_data.slonglong; 145924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return true; 146024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 146124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: 146224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: 146324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: return true; 146424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: m_data.flt = fabsf(m_data.flt); return true; 146524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: m_data.dbl = fabs(m_data.dbl); return true; 146624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: m_data.ldbl = fabsl(m_data.ldbl); return true; 146724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 146824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return false; 146924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 147024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 147124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 147224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 147324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::UnaryNegate() 147424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 147524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (m_type) 147624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 147724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: break; 147824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: m_data.sint = -m_data.sint; return true; 147924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: m_data.uint = -m_data.uint; return true; 148024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: m_data.slong = -m_data.slong; return true; 148124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: m_data.ulong = -m_data.ulong; return true; 148224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: m_data.slonglong = -m_data.slonglong; return true; 148324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: m_data.ulonglong = -m_data.ulonglong; return true; 148424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: m_data.flt = -m_data.flt; return true; 148524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: m_data.dbl = -m_data.dbl; return true; 148624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: m_data.ldbl = -m_data.ldbl; return true; 148724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 148824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return false; 148924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 149024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 149124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 149224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::OnesComplement() 149324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 149424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (m_type) 149524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 149624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_sint: m_data.sint = ~m_data.sint; return true; 149724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_uint: m_data.uint = ~m_data.uint; return true; 149824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slong: m_data.slong = ~m_data.slong; return true; 149924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulong: m_data.ulong = ~m_data.ulong; return true; 150024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_slonglong: m_data.slonglong = ~m_data.slonglong; return true; 150124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_ulonglong: m_data.ulonglong = ~m_data.ulonglong; return true; 150224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 150324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_void: 150424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_float: 150524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_double: 150624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case e_long_double: 150724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 150824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 150924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return false; 151024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 151124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 151224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 151324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst Scalar 151424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb_private::operator+ (const Scalar& lhs, const Scalar& rhs) 151524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 151624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Scalar result; 151724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Scalar temp_value; 151824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Scalar* a; 151924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Scalar* b; 152024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if ((result.m_type = PromoteToMaxType(lhs, rhs, temp_value, a, b)) != Scalar::e_void) 152124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 152224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (result.m_type) 152324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 152424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_void: break; 152524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_sint: result.m_data.sint = a->m_data.sint + b->m_data.sint; break; 152624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_uint: result.m_data.uint = a->m_data.uint + b->m_data.uint; break; 152724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_slong: result.m_data.slong = a->m_data.slong + b->m_data.slong; break; 152824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_ulong: result.m_data.ulong = a->m_data.ulong + b->m_data.ulong; break; 152924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_slonglong: result.m_data.slonglong = a->m_data.slonglong + b->m_data.slonglong; break; 153024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_ulonglong: result.m_data.ulonglong = a->m_data.ulonglong + b->m_data.ulonglong; break; 153124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_float: result.m_data.flt = a->m_data.flt + b->m_data.flt; break; 153224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_double: result.m_data.dbl = a->m_data.dbl + b->m_data.dbl; break; 153324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_long_double: result.m_data.ldbl = a->m_data.ldbl + b->m_data.ldbl; break; 153424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 153524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 153624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return result; 153724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 153824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 153924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 154024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst Scalar 154124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb_private::operator- (const Scalar& lhs, const Scalar& rhs) 154224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 154324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Scalar result; 154424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Scalar temp_value; 154524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Scalar* a; 154624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Scalar* b; 154724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if ((result.m_type = PromoteToMaxType(lhs, rhs, temp_value, a, b)) != Scalar::e_void) 154824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 154924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (result.m_type) 155024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 155124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_void: break; 155224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_sint: result.m_data.sint = a->m_data.sint - b->m_data.sint; break; 155324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_uint: result.m_data.uint = a->m_data.uint - b->m_data.uint; break; 155424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_slong: result.m_data.slong = a->m_data.slong - b->m_data.slong; break; 155524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_ulong: result.m_data.ulong = a->m_data.ulong - b->m_data.ulong; break; 155624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_slonglong: result.m_data.slonglong = a->m_data.slonglong - b->m_data.slonglong; break; 155724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_ulonglong: result.m_data.ulonglong = a->m_data.ulonglong - b->m_data.ulonglong; break; 155824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_float: result.m_data.flt = a->m_data.flt - b->m_data.flt; break; 155924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_double: result.m_data.dbl = a->m_data.dbl - b->m_data.dbl; break; 156024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_long_double: result.m_data.ldbl = a->m_data.ldbl - b->m_data.ldbl; break; 156124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 156224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 156324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return result; 156424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 156524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 156624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst Scalar 156724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb_private::operator/ (const Scalar& lhs, const Scalar& rhs) 156824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 156924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Scalar result; 157024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Scalar temp_value; 157124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Scalar* a; 157224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Scalar* b; 157324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if ((result.m_type = PromoteToMaxType(lhs, rhs, temp_value, a, b)) != Scalar::e_void) 157424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 157524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (result.m_type) 157624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 157724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_void: break; 157824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 157924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_sint: if (b->m_data.sint != 0) { result.m_data.sint = a->m_data.sint/ b->m_data.sint; return result; } break; 158024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_uint: if (b->m_data.uint != 0) { result.m_data.uint = a->m_data.uint / b->m_data.uint; return result; } break; 158124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_slong: if (b->m_data.slong != 0) { result.m_data.slong = a->m_data.slong / b->m_data.slong; return result; } break; 158224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_ulong: if (b->m_data.ulong != 0) { result.m_data.ulong = a->m_data.ulong / b->m_data.ulong; return result; } break; 158324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_slonglong: if (b->m_data.slonglong != 0) { result.m_data.slonglong = a->m_data.slonglong / b->m_data.slonglong; return result; } break; 158424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_ulonglong: if (b->m_data.ulonglong != 0) { result.m_data.ulonglong = a->m_data.ulonglong / b->m_data.ulonglong; return result; } break; 158524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_float: if (b->m_data.flt != 0.0f) { result.m_data.flt = a->m_data.flt / b->m_data.flt; return result; } break; 158624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_double: if (b->m_data.dbl != 0.0) { result.m_data.dbl = a->m_data.dbl / b->m_data.dbl; return result; } break; 158724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_long_double: if (b->m_data.ldbl != 0.0) { result.m_data.ldbl = a->m_data.ldbl / b->m_data.ldbl; return result; } break; 158824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 158924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 159024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // For division only, the only way it should make it here is if a promotion failed, 159124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // or if we are trying to do a divide by zero. 159224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.m_type = Scalar::e_void; 159324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return result; 159424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 159524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 159624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst Scalar 159724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb_private::operator* (const Scalar& lhs, const Scalar& rhs) 159824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 159924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Scalar result; 160024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Scalar temp_value; 160124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Scalar* a; 160224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Scalar* b; 160324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if ((result.m_type = PromoteToMaxType(lhs, rhs, temp_value, a, b)) != Scalar::e_void) 160424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 160524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (result.m_type) 160624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 160724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_void: break; 160824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_sint: result.m_data.sint = a->m_data.sint * b->m_data.sint; break; 160924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_uint: result.m_data.uint = a->m_data.uint * b->m_data.uint; break; 161024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_slong: result.m_data.slong = a->m_data.slong * b->m_data.slong; break; 161124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_ulong: result.m_data.ulong = a->m_data.ulong * b->m_data.ulong; break; 161224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_slonglong: result.m_data.slonglong = a->m_data.slonglong * b->m_data.slonglong; break; 161324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_ulonglong: result.m_data.ulonglong = a->m_data.ulonglong * b->m_data.ulonglong; break; 161424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_float: result.m_data.flt = a->m_data.flt * b->m_data.flt; break; 161524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_double: result.m_data.dbl = a->m_data.dbl * b->m_data.dbl; break; 161624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_long_double: result.m_data.ldbl = a->m_data.ldbl * b->m_data.ldbl; break; 161724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 161824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 161924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return result; 162024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 162124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 162224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst Scalar 162324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb_private::operator& (const Scalar& lhs, const Scalar& rhs) 162424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 162524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Scalar result; 162624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Scalar temp_value; 162724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Scalar* a; 162824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Scalar* b; 162924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if ((result.m_type = PromoteToMaxType(lhs, rhs, temp_value, a, b)) != Scalar::e_void) 163024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 163124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (result.m_type) 163224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 163324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_sint: result.m_data.sint = a->m_data.sint & b->m_data.sint; break; 163424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_uint: result.m_data.uint = a->m_data.uint & b->m_data.uint; break; 163524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_slong: result.m_data.slong = a->m_data.slong & b->m_data.slong; break; 163624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_ulong: result.m_data.ulong = a->m_data.ulong & b->m_data.ulong; break; 163724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_slonglong: result.m_data.slonglong = a->m_data.slonglong & b->m_data.slonglong; break; 163824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_ulonglong: result.m_data.ulonglong = a->m_data.ulonglong & b->m_data.ulonglong; break; 163924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 164024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_void: 164124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_float: 164224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_double: 164324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_long_double: 164424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // No bitwise AND on floats, doubles of long doubles 164524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.m_type = Scalar::e_void; 164624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 164724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 164824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 164924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return result; 165024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 165124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 165224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst Scalar 165324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb_private::operator| (const Scalar& lhs, const Scalar& rhs) 165424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 165524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Scalar result; 165624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Scalar temp_value; 165724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Scalar* a; 165824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Scalar* b; 165924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if ((result.m_type = PromoteToMaxType(lhs, rhs, temp_value, a, b)) != Scalar::e_void) 166024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 166124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (result.m_type) 166224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 166324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_sint: result.m_data.sint = a->m_data.sint | b->m_data.sint; break; 166424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_uint: result.m_data.uint = a->m_data.uint | b->m_data.uint; break; 166524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_slong: result.m_data.slong = a->m_data.slong | b->m_data.slong; break; 166624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_ulong: result.m_data.ulong = a->m_data.ulong | b->m_data.ulong; break; 166724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_slonglong: result.m_data.slonglong = a->m_data.slonglong | b->m_data.slonglong; break; 166824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_ulonglong: result.m_data.ulonglong = a->m_data.ulonglong | b->m_data.ulonglong; break; 166924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 167024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_void: 167124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_float: 167224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_double: 167324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_long_double: 167424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // No bitwise AND on floats, doubles of long doubles 167524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.m_type = Scalar::e_void; 167624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 167724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 167824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 167924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return result; 168024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 168124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 168224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst Scalar 168324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb_private::operator% (const Scalar& lhs, const Scalar& rhs) 168424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 168524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Scalar result; 168624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Scalar temp_value; 168724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Scalar* a; 168824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Scalar* b; 168924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if ((result.m_type = PromoteToMaxType(lhs, rhs, temp_value, a, b)) != Scalar::e_void) 169024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 169124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (result.m_type) 169224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 169324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_sint: result.m_data.sint = a->m_data.sint % b->m_data.sint; break; 169424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_uint: result.m_data.uint = a->m_data.uint % b->m_data.uint; break; 169524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_slong: result.m_data.slong = a->m_data.slong % b->m_data.slong; break; 169624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_ulong: result.m_data.ulong = a->m_data.ulong % b->m_data.ulong; break; 169724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_slonglong: result.m_data.slonglong = a->m_data.slonglong % b->m_data.slonglong; break; 169824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_ulonglong: result.m_data.ulonglong = a->m_data.ulonglong % b->m_data.ulonglong; break; 169924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 170024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_void: 170124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_float: 170224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_double: 170324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_long_double: 170424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // No bitwise AND on floats, doubles of long doubles 170524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.m_type = Scalar::e_void; 170624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 170724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 170824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 170924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return result; 171024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 171124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 171224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst Scalar 171324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb_private::operator^ (const Scalar& lhs, const Scalar& rhs) 171424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 171524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Scalar result; 171624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Scalar temp_value; 171724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Scalar* a; 171824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Scalar* b; 171924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if ((result.m_type = PromoteToMaxType(lhs, rhs, temp_value, a, b)) != Scalar::e_void) 172024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 172124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (result.m_type) 172224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 172324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_sint: result.m_data.sint = a->m_data.sint ^ b->m_data.sint; break; 172424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_uint: result.m_data.uint = a->m_data.uint ^ b->m_data.uint; break; 172524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_slong: result.m_data.slong = a->m_data.slong ^ b->m_data.slong; break; 172624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_ulong: result.m_data.ulong = a->m_data.ulong ^ b->m_data.ulong; break; 172724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_slonglong: result.m_data.slonglong = a->m_data.slonglong ^ b->m_data.slonglong; break; 172824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_ulonglong: result.m_data.ulonglong = a->m_data.ulonglong ^ b->m_data.ulonglong; break; 172924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 173024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_void: 173124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_float: 173224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_double: 173324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_long_double: 173424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // No bitwise AND on floats, doubles of long doubles 173524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.m_type = Scalar::e_void; 173624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 173724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 173824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 173924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return result; 174024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 174124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1742fac004ce7f0d5bbfaa6b59a88365bb752e31129dSean Callananconst Scalar 1743fac004ce7f0d5bbfaa6b59a88365bb752e31129dSean Callananlldb_private::operator<< (const Scalar& lhs, const Scalar &rhs) 1744fac004ce7f0d5bbfaa6b59a88365bb752e31129dSean Callanan{ 1745fac004ce7f0d5bbfaa6b59a88365bb752e31129dSean Callanan Scalar result = lhs; 1746fac004ce7f0d5bbfaa6b59a88365bb752e31129dSean Callanan result <<= rhs; 1747fac004ce7f0d5bbfaa6b59a88365bb752e31129dSean Callanan return result; 1748fac004ce7f0d5bbfaa6b59a88365bb752e31129dSean Callanan} 1749fac004ce7f0d5bbfaa6b59a88365bb752e31129dSean Callanan 1750fac004ce7f0d5bbfaa6b59a88365bb752e31129dSean Callananconst Scalar 1751fac004ce7f0d5bbfaa6b59a88365bb752e31129dSean Callananlldb_private::operator>> (const Scalar& lhs, const Scalar &rhs) 1752fac004ce7f0d5bbfaa6b59a88365bb752e31129dSean Callanan{ 1753fac004ce7f0d5bbfaa6b59a88365bb752e31129dSean Callanan Scalar result = lhs; 1754fac004ce7f0d5bbfaa6b59a88365bb752e31129dSean Callanan result >>= rhs; 1755fac004ce7f0d5bbfaa6b59a88365bb752e31129dSean Callanan return result; 1756fac004ce7f0d5bbfaa6b59a88365bb752e31129dSean Callanan} 1757fac004ce7f0d5bbfaa6b59a88365bb752e31129dSean Callanan 175824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Return the raw unsigned integer without any casting or conversion 175924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerunsigned int 176024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::RawUInt () const 176124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 176224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_data.uint; 176324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 176424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 176524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Return the raw unsigned long without any casting or conversion 176624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerunsigned long 176724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::RawULong () const 176824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 176924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_data.ulong; 177024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 177124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 177224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Return the raw unsigned long long without any casting or conversion 177324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerunsigned long long 177424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScalar::RawULongLong () const 177524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 177624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_data.ulonglong; 177724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 177824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 177924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 178024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerError 178136da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg ClaytonScalar::SetValueFromCString (const char *value_str, Encoding encoding, size_t byte_size) 178224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 178324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Error error; 1784b822658f49a461f9d6eff177c67c264226b9648eJohnny Chen if (value_str == NULL || value_str[0] == '\0') 178524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 178624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner error.SetErrorString ("Invalid c-string value string."); 178724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return error; 178824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 178924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool success = false; 179024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (encoding) 179124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 179224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case eEncodingInvalid: 179324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner error.SetErrorString ("Invalid encoding."); 179424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 179524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 179624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case eEncodingUint: 179724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (byte_size <= sizeof (unsigned long long)) 179824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 179924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint64_t uval64 = Args::StringToUInt64(value_str, UINT64_MAX, 0, &success); 180024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (!success) 18019c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Clayton error.SetErrorStringWithFormat ("'%s' is not a valid unsigned integer string value", value_str); 180224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else if (!UIntValueIsValidForSize (uval64, byte_size)) 180336da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton error.SetErrorStringWithFormat ("value 0x%" PRIx64 " is too large to fit in a %zu byte unsigned integer value", uval64, byte_size); 180424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 180524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 180624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = Scalar::GetValueTypeForUnsignedIntegerWithByteSize (byte_size); 180724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (m_type) 180824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 180936da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton case e_uint: m_data.uint = (uint_t)uval64; break; 181036da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton case e_ulong: m_data.ulong = (ulong_t)uval64; break; 181136da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton case e_ulonglong: m_data.ulonglong = (ulonglong_t)uval64; break; 181224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner default: 181336da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton error.SetErrorStringWithFormat ("unsupported unsigned integer byte size: %zu", byte_size); 181424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 181524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 181624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 181724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 181824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 181924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 182036da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton error.SetErrorStringWithFormat ("unsupported unsigned integer byte size: %zu", byte_size); 182124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return error; 182224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 182324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 182424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 182524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case eEncodingSint: 182624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (byte_size <= sizeof (long long)) 182724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 182824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint64_t sval64 = Args::StringToSInt64(value_str, INT64_MAX, 0, &success); 182924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (!success) 18309c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Clayton error.SetErrorStringWithFormat ("'%s' is not a valid signed integer string value", value_str); 183124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else if (!SIntValueIsValidForSize (sval64, byte_size)) 183236da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton error.SetErrorStringWithFormat ("value 0x%" PRIx64 " is too large to fit in a %zu byte signed integer value", sval64, byte_size); 183324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 183424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 183524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = Scalar::GetValueTypeForSignedIntegerWithByteSize (byte_size); 183624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (m_type) 183724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 183836da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton case e_sint: m_data.sint = (sint_t)sval64; break; 183936da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton case e_slong: m_data.slong = (slong_t)sval64; break; 184036da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton case e_slonglong: m_data.slonglong = (slonglong_t)sval64; break; 184124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner default: 184236da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton error.SetErrorStringWithFormat ("unsupported signed integer byte size: %zu", byte_size); 184324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 184424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 184524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 184624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 184724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 184824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 184936da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton error.SetErrorStringWithFormat ("unsupported signed integer byte size: %zu", byte_size); 185024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return error; 185124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 185224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 185324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 185424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case eEncodingIEEE754: 185524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (byte_size == sizeof (float)) 185624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 185724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (::sscanf (value_str, "%f", &m_data.flt) == 1) 185824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = e_float; 185924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 18609c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Clayton error.SetErrorStringWithFormat ("'%s' is not a valid float string value", value_str); 186124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 186224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else if (byte_size == sizeof (double)) 186324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 186424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (::sscanf (value_str, "%lf", &m_data.dbl) == 1) 186524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = e_double; 186624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 18679c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Clayton error.SetErrorStringWithFormat ("'%s' is not a valid float string value", value_str); 186824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 186924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else if (byte_size == sizeof (long double)) 187024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 187124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (::sscanf (value_str, "%Lf", &m_data.ldbl) == 1) 187224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = e_long_double; 187324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 18749c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Clayton error.SetErrorStringWithFormat ("'%s' is not a valid float string value", value_str); 187524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 187624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 187724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 187836da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton error.SetErrorStringWithFormat ("unsupported float byte size: %zu", byte_size); 187924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return error; 188024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 188124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 188224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 188324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case eEncodingVector: 18849c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Clayton error.SetErrorString ("vector encoding unsupported."); 188524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 188624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 188724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (error.Fail()) 188824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_type = e_void; 188924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 189024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return error; 189124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 189224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1893ab8e00e51475b9148626bfdf99549b7ffc3d046dSean CallananError 1894ab8e00e51475b9148626bfdf99549b7ffc3d046dSean CallananScalar::SetValueFromData (DataExtractor &data, lldb::Encoding encoding, size_t byte_size) 1895ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan{ 1896ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan Error error; 1897ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan 1898ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan switch (encoding) 1899ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan { 1900ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan case lldb::eEncodingInvalid: 1901ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan error.SetErrorString ("invalid encoding"); 1902ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan break; 1903ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan case lldb::eEncodingVector: 1904ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan error.SetErrorString ("vector encoding unsupported"); 1905ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan break; 1906ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan case lldb::eEncodingUint: 1907ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan { 1908ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan lldb::offset_t offset; 1909ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan 1910ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan switch (byte_size) 1911ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan { 1912ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan case 1: operator=((uint8_t)data.GetU8(&offset)); break; 1913ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan case 2: operator=((uint16_t)data.GetU16(&offset)); break; 1914ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan case 4: operator=((uint32_t)data.GetU32(&offset)); break; 1915ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan case 8: operator=((uint64_t)data.GetU64(&offset)); break; 1916ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan default: 1917ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan error.SetErrorStringWithFormat ("unsupported unsigned integer byte size: %zu", byte_size); 1918ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan break; 1919ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan } 1920ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan } 1921ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan break; 1922ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan case lldb::eEncodingSint: 1923ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan { 1924ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan lldb::offset_t offset; 1925ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan 1926ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan switch (byte_size) 1927ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan { 1928ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan case 1: operator=((int8_t)data.GetU8(&offset)); break; 1929ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan case 2: operator=((int16_t)data.GetU16(&offset)); break; 1930ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan case 4: operator=((int32_t)data.GetU32(&offset)); break; 1931ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan case 8: operator=((int64_t)data.GetU64(&offset)); break; 1932ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan default: 1933ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan error.SetErrorStringWithFormat ("unsupported signed integer byte size: %zu", byte_size); 1934ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan break; 1935ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan } 1936ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan } 1937ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan break; 1938ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan case lldb::eEncodingIEEE754: 1939ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan { 1940ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan lldb::offset_t offset; 1941ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan 1942ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan if (byte_size == sizeof (float)) 1943ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan operator=((float)data.GetFloat(&offset)); 1944ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan else if (byte_size == sizeof (double)) 1945ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan operator=((double)data.GetDouble(&offset)); 1946ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan else if (byte_size == sizeof (long double)) 1947ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan operator=((long double)data.GetLongDouble(&offset)); 1948ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan else 1949ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan error.SetErrorStringWithFormat ("unsupported float byte size: %zu", byte_size); 1950ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan } 1951ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan break; 1952ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan } 1953ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan 1954ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan return error; 1955ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan} 1956ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan 195724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 19585fba9eec8d79109bf44d5b0a59dda377c65544c5Greg ClaytonScalar::SignExtend (uint32_t sign_bit_pos) 19595fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton{ 19605fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton const uint32_t max_bit_pos = GetByteSize() * 8; 19615fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton 19625fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton if (sign_bit_pos < max_bit_pos) 19635fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton { 19645fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton switch (m_type) 19655fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton { 19665fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton case Scalar::e_void: 19675fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton case Scalar::e_float: 19685fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton case Scalar::e_double: 19695fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton case Scalar::e_long_double: 19705fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton return false; 19715fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton 19725fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton case Scalar::e_sint: 19735fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton case Scalar::e_uint: 19745fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton if (max_bit_pos == sign_bit_pos) 19755fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton return true; 19765fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton else if (sign_bit_pos < (max_bit_pos-1)) 19775fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton { 19785fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton unsigned int sign_bit = 1u << sign_bit_pos; 19795fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton if (m_data.uint & sign_bit) 19805fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton { 19815fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton const unsigned int mask = ~(sign_bit) + 1u; 19825fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton m_data.uint |= mask; 19835fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton } 19845fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton return true; 19855fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton } 19865fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton break; 19875fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton 19885fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton case Scalar::e_slong: 19895fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton case Scalar::e_ulong: 19905fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton if (max_bit_pos == sign_bit_pos) 19915fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton return true; 19925fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton else if (sign_bit_pos < (max_bit_pos-1)) 19935fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton { 19945fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton unsigned long sign_bit = 1ul << sign_bit_pos; 19954e56cd9fb11ab938f581c714c3f26a44ee1cbacaGreg Clayton if (m_data.ulong & sign_bit) 19965fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton { 19975fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton const unsigned long mask = ~(sign_bit) + 1ul; 19984e56cd9fb11ab938f581c714c3f26a44ee1cbacaGreg Clayton m_data.ulong |= mask; 19995fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton } 20005fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton return true; 20015fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton } 20025fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton break; 20035fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton 20045fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton case Scalar::e_slonglong: 20055fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton case Scalar::e_ulonglong: 20065fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton if (max_bit_pos == sign_bit_pos) 20075fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton return true; 20085fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton else if (sign_bit_pos < (max_bit_pos-1)) 20095fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton { 20105fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton unsigned long long sign_bit = 1ull << sign_bit_pos; 20114e56cd9fb11ab938f581c714c3f26a44ee1cbacaGreg Clayton if (m_data.ulonglong & sign_bit) 20125fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton { 20135fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton const unsigned long long mask = ~(sign_bit) + 1ull; 20144e56cd9fb11ab938f581c714c3f26a44ee1cbacaGreg Clayton m_data.ulonglong |= mask; 20155fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton } 20165fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton return true; 20175fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton } 20185fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton break; 20195fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton } 20205fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton } 20215fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton return false; 20225fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton} 20235fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Clayton 202436da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Claytonsize_t 2025c0fa53324d62a48257c092a3347d6e7236aa3152Greg ClaytonScalar::GetAsMemoryData (void *dst, 202636da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton size_t dst_len, 2027c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton lldb::ByteOrder dst_byte_order, 2028c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton Error &error) const 2029c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton{ 2030c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton // Get a data extractor that points to the native scalar data 2031c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton DataExtractor data; 2032c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton if (!GetData(data)) 2033c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton { 2034c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton error.SetErrorString ("invalid scalar value"); 2035c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton return 0; 2036c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton } 2037c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton 2038c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton const size_t src_len = data.GetByteSize(); 2039c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton 2040c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton // Prepare a memory buffer that contains some or all of the register value 204136da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton const size_t bytes_copied = data.CopyByteOrderedData (0, // src offset 2042c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton src_len, // src length 2043c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton dst, // dst buffer 2044c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton dst_len, // dst length 2045c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton dst_byte_order); // dst byte order 2046c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton if (bytes_copied == 0) 2047c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton error.SetErrorString ("failed to copy data"); 2048c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton 2049c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton return bytes_copied; 2050c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton} 2051c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton 20525fba9eec8d79109bf44d5b0a59dda377c65544c5Greg Claytonbool 20531716ad73618aab3cff4d82c3adc11a88ef76273dGreg ClaytonScalar::ExtractBitfield (uint32_t bit_size, 20541716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton uint32_t bit_offset) 20551716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton{ 20561716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton if (bit_size == 0) 20571716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton return true; 20581716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton 20591716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton uint32_t msbit = bit_offset + bit_size - 1; 20601716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton uint32_t lsbit = bit_offset; 20611716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton switch (m_type) 20621716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton { 20631716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton case Scalar::e_void: 20641716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton break; 20651716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton 20661716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton case e_float: 206736da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton if (sizeof(m_data.flt) == sizeof(sint_t)) 206836da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton m_data.sint = (sint_t)SignedBits (m_data.sint, msbit, lsbit); 206936da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton else if (sizeof(m_data.flt) == sizeof(ulong_t)) 207036da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton m_data.slong = (slong_t)SignedBits (m_data.slong, msbit, lsbit); 207136da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton else if (sizeof(m_data.flt) == sizeof(ulonglong_t)) 207236da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton m_data.slonglong = (slonglong_t)SignedBits (m_data.slonglong, msbit, lsbit); 20731716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton else 20741716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton return false; 20751716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton return true; 20761716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton 20771716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton case e_double: 207836da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton if (sizeof(m_data.dbl) == sizeof(sint_t)) 20791716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton m_data.sint = SignedBits (m_data.sint, msbit, lsbit); 208036da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton else if (sizeof(m_data.dbl) == sizeof(ulong_t)) 20811716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton m_data.slong = SignedBits (m_data.slong, msbit, lsbit); 208236da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton else if (sizeof(m_data.dbl) == sizeof(ulonglong_t)) 20831716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton m_data.slonglong = SignedBits (m_data.slonglong, msbit, lsbit); 20841716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton else 20851716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton return false; 20861716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton return true; 20871716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton 20881716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton case e_long_double: 208936da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton if (sizeof(m_data.ldbl) == sizeof(sint_t)) 20901716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton m_data.sint = SignedBits (m_data.sint, msbit, lsbit); 209136da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton else if (sizeof(m_data.ldbl) == sizeof(ulong_t)) 20921716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton m_data.slong = SignedBits (m_data.slong, msbit, lsbit); 209336da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton else if (sizeof(m_data.ldbl) == sizeof(ulonglong_t)) 20941716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton m_data.slonglong = SignedBits (m_data.slonglong, msbit, lsbit); 20951716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton else 20961716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton return false; 20971716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton return true; 20981716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton 20991716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton case Scalar::e_sint: 210036da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton m_data.sint = (sint_t)SignedBits (m_data.sint, msbit, lsbit); 21011716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton return true; 21021716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton 21031716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton case Scalar::e_uint: 210436da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton m_data.uint = (uint_t)UnsignedBits (m_data.uint, msbit, lsbit); 21051716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton return true; 21061716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton 21071716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton case Scalar::e_slong: 210836da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton m_data.slong = (slong_t)SignedBits (m_data.slong, msbit, lsbit); 21091716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton return true; 21101716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton 21111716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton case Scalar::e_ulong: 211236da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton m_data.ulong = (ulong_t)UnsignedBits (m_data.ulong, msbit, lsbit); 21131716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton return true; 21141716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton 21151716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton case Scalar::e_slonglong: 211636da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton m_data.slonglong = (slonglong_t)SignedBits (m_data.slonglong, msbit, lsbit); 21171716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton return true; 21181716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton 21191716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton case Scalar::e_ulonglong: 212036da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton m_data.ulonglong = (ulonglong_t)UnsignedBits (m_data.ulonglong, msbit, lsbit); 21211716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton return true; 21221716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton } 21231716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton return false; 21241716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton} 21251716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton 21261716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton 21271716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton 21281716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton 21291716ad73618aab3cff4d82c3adc11a88ef76273dGreg Clayton 21301716ad73618aab3cff4d82c3adc11a88ef76273dGreg Claytonbool 213124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb_private::operator== (const Scalar& lhs, const Scalar& rhs) 213224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 213324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // If either entry is void then we can just compare the types 213424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (lhs.m_type == Scalar::e_void || rhs.m_type == Scalar::e_void) 213524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return lhs.m_type == rhs.m_type; 213624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 213724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Scalar temp_value; 213824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Scalar* a; 213924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Scalar* b; 214024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (PromoteToMaxType(lhs, rhs, temp_value, a, b)) 214124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 214224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_void: break; 214324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_sint: return a->m_data.sint == b->m_data.sint; 214424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_uint: return a->m_data.uint == b->m_data.uint; 214524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_slong: return a->m_data.slong == b->m_data.slong; 214624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_ulong: return a->m_data.ulong == b->m_data.ulong; 214724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_slonglong: return a->m_data.slonglong == b->m_data.slonglong; 214824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_ulonglong: return a->m_data.ulonglong == b->m_data.ulonglong; 214924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_float: return a->m_data.flt == b->m_data.flt; 215024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_double: return a->m_data.dbl == b->m_data.dbl; 215124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_long_double: return a->m_data.ldbl == b->m_data.ldbl; 215224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 215324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return false; 215424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 215524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 215624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 215724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb_private::operator!= (const Scalar& lhs, const Scalar& rhs) 215824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 215924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // If either entry is void then we can just compare the types 216024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (lhs.m_type == Scalar::e_void || rhs.m_type == Scalar::e_void) 216124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return lhs.m_type != rhs.m_type; 216224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 216324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Scalar temp_value; // A temp value that might get a copy of either promoted value 216424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Scalar* a; 216524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Scalar* b; 216624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (PromoteToMaxType(lhs, rhs, temp_value, a, b)) 216724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 216824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_void: break; 216924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_sint: return a->m_data.sint != b->m_data.sint; 217024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_uint: return a->m_data.uint != b->m_data.uint; 217124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_slong: return a->m_data.slong != b->m_data.slong; 217224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_ulong: return a->m_data.ulong != b->m_data.ulong; 217324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_slonglong: return a->m_data.slonglong != b->m_data.slonglong; 217424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_ulonglong: return a->m_data.ulonglong != b->m_data.ulonglong; 217524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_float: return a->m_data.flt != b->m_data.flt; 217624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_double: return a->m_data.dbl != b->m_data.dbl; 217724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_long_double: return a->m_data.ldbl != b->m_data.ldbl; 217824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 217924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return true; 218024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 218124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 218224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 218324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb_private::operator< (const Scalar& lhs, const Scalar& rhs) 218424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 218524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (lhs.m_type == Scalar::e_void || rhs.m_type == Scalar::e_void) 218624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return false; 218724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 218824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Scalar temp_value; 218924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Scalar* a; 219024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Scalar* b; 219124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (PromoteToMaxType(lhs, rhs, temp_value, a, b)) 219224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 219324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_void: break; 219424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_sint: return a->m_data.sint < b->m_data.sint; 219524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_uint: return a->m_data.uint < b->m_data.uint; 219624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_slong: return a->m_data.slong < b->m_data.slong; 219724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_ulong: return a->m_data.ulong < b->m_data.ulong; 219824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_slonglong: return a->m_data.slonglong < b->m_data.slonglong; 219924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_ulonglong: return a->m_data.ulonglong < b->m_data.ulonglong; 220024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_float: return a->m_data.flt < b->m_data.flt; 220124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_double: return a->m_data.dbl < b->m_data.dbl; 220224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_long_double: return a->m_data.ldbl < b->m_data.ldbl; 220324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 220424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return false; 220524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 220624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 220724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 220824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb_private::operator<= (const Scalar& lhs, const Scalar& rhs) 220924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 221024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (lhs.m_type == Scalar::e_void || rhs.m_type == Scalar::e_void) 221124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return false; 221224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 221324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Scalar temp_value; 221424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Scalar* a; 221524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Scalar* b; 221624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (PromoteToMaxType(lhs, rhs, temp_value, a, b)) 221724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 221824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_void: break; 221924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_sint: return a->m_data.sint <= b->m_data.sint; 222024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_uint: return a->m_data.uint <= b->m_data.uint; 222124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_slong: return a->m_data.slong <= b->m_data.slong; 222224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_ulong: return a->m_data.ulong <= b->m_data.ulong; 222324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_slonglong: return a->m_data.slonglong <= b->m_data.slonglong; 222424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_ulonglong: return a->m_data.ulonglong <= b->m_data.ulonglong; 222524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_float: return a->m_data.flt <= b->m_data.flt; 222624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_double: return a->m_data.dbl <= b->m_data.dbl; 222724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_long_double: return a->m_data.ldbl <= b->m_data.ldbl; 222824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 222924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return false; 223024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 223124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 223224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 223324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 223424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb_private::operator> (const Scalar& lhs, const Scalar& rhs) 223524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 223624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (lhs.m_type == Scalar::e_void || rhs.m_type == Scalar::e_void) 223724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return false; 223824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 223924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Scalar temp_value; 224024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Scalar* a; 224124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Scalar* b; 224224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (PromoteToMaxType(lhs, rhs, temp_value, a, b)) 224324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 224424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_void: break; 224524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_sint: return a->m_data.sint > b->m_data.sint; 224624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_uint: return a->m_data.uint > b->m_data.uint; 224724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_slong: return a->m_data.slong > b->m_data.slong; 224824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_ulong: return a->m_data.ulong > b->m_data.ulong; 224924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_slonglong: return a->m_data.slonglong > b->m_data.slonglong; 225024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_ulonglong: return a->m_data.ulonglong > b->m_data.ulonglong; 225124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_float: return a->m_data.flt > b->m_data.flt; 225224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_double: return a->m_data.dbl > b->m_data.dbl; 225324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_long_double: return a->m_data.ldbl > b->m_data.ldbl; 225424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 225524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return false; 225624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 225724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 225824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 225924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb_private::operator>= (const Scalar& lhs, const Scalar& rhs) 226024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 226124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (lhs.m_type == Scalar::e_void || rhs.m_type == Scalar::e_void) 226224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return false; 226324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 226424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Scalar temp_value; 226524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Scalar* a; 226624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Scalar* b; 226724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (PromoteToMaxType(lhs, rhs, temp_value, a, b)) 226824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 226924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_void: break; 227024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_sint: return a->m_data.sint >= b->m_data.sint; 227124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_uint: return a->m_data.uint >= b->m_data.uint; 227224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_slong: return a->m_data.slong >= b->m_data.slong; 227324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_ulong: return a->m_data.ulong >= b->m_data.ulong; 227424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_slonglong: return a->m_data.slonglong >= b->m_data.slonglong; 227524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_ulonglong: return a->m_data.ulonglong >= b->m_data.ulonglong; 227624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_float: return a->m_data.flt >= b->m_data.flt; 227724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_double: return a->m_data.dbl >= b->m_data.dbl; 227824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case Scalar::e_long_double: return a->m_data.ldbl >= b->m_data.ldbl; 227924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 228024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return false; 228124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 228224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 228324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 228424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 228524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2286