Mercurial > octave-nkf
comparison libinterp/interp-core/pt-jit.cc @ 15893:1f076c40c133
Do not use vectorized llvm commands for complex numbers
* jit-typeinfo.cc (octave_jit_complex_mul): New function.
(jit_typeinfo::jit_typeinfo): Implement complex numbers using an llvm array and
use create_internal/create_external.
(jit_typeinfo::complex_real, jit_typeinfo::complex_imag,
jit_typeinfo::pack_complex, jit_typeinfo::unpack_complex): Implement complex
numbers using an llvm array.
(jit_typeinfo::add_binary_op, jit_typeinfo::add_binary_icmp,
jit_typeinfo::add_binary_fcmp, jit_typeinfo::create_identity,
jit_typeinfo::register_intrinsic, jit_typeinfo::register_generic,
jit_typeinfo::mirror_binary): Use create_internal/create_external.
(jit_typeinfo::type_of): Correctly determine complex type.
* jit-typeinfo.h (jit_typeinfo::create_complex,
jit_typeinfo::create_internal, jit_typeinfo::create_external): New function.
* pt-jit.cc (jit_convert_llvm::visit): Create an array for complex constants.
author | Max Brister <max@2bass.com> |
---|---|
date | Thu, 03 Jan 2013 12:35:10 -0700 |
parents | 44272909d926 |
children | 0cbac4d3a81c e125db98263f |
comparison
equal
deleted
inserted
replaced
15890:44f30dcd87e0 | 15893:1f076c40c133 |
---|---|
1254 | 1254 |
1255 void | 1255 void |
1256 jit_convert_llvm::visit (jit_const_complex& cc) | 1256 jit_convert_llvm::visit (jit_const_complex& cc) |
1257 { | 1257 { |
1258 llvm::Type *scalar_t = jit_typeinfo::get_scalar_llvm (); | 1258 llvm::Type *scalar_t = jit_typeinfo::get_scalar_llvm (); |
1259 llvm::Constant *values[2]; | |
1260 Complex value = cc.value (); | 1259 Complex value = cc.value (); |
1261 values[0] = llvm::ConstantFP::get (scalar_t, value.real ()); | 1260 llvm::Value *real = llvm::ConstantFP::get (scalar_t, value.real ()); |
1262 values[1] = llvm::ConstantFP::get (scalar_t, value.imag ()); | 1261 llvm::Value *imag = llvm::ConstantFP::get (scalar_t, value.imag ()); |
1263 cc.stash_llvm (llvm::ConstantVector::get (values)); | 1262 cc.stash_llvm (jit_typeinfo::create_complex (real, imag)); |
1264 } | 1263 } |
1265 | 1264 |
1266 void jit_convert_llvm::visit (jit_const_index& ci) | 1265 void jit_convert_llvm::visit (jit_const_index& ci) |
1267 { | 1266 { |
1268 ci.stash_llvm (llvm::ConstantInt::get (ci.type_llvm (), ci.value ())); | 1267 ci.stash_llvm (llvm::ConstantInt::get (ci.type_llvm (), ci.value ())); |