Class: BOAST::Set
- Extended by:
- Functor
- Includes:
- Arithmetic, Inspectable, Intrinsics, PrivateStateAccessor
- Defined in:
- lib/BOAST/Language/Operators.rb
Constant Summary
Constants included from Intrinsics
Intrinsics::CONVERSIONS, Intrinsics::INTRINSICS
Constants inherited from Operator
Instance Attribute Summary collapse
-
#return_type ⇒ Object
readonly
Returns the value of attribute return_type.
-
#source ⇒ Object
readonly
Returns the value of attribute source.
Instance Method Summary collapse
-
#initialize(source, return_type) ⇒ Set
constructor
A new instance of Set.
- #pr ⇒ Object
- #to_s ⇒ Object
- #to_var ⇒ Object
- #type ⇒ Object
Methods included from Functor
Methods included from PrivateStateAccessor
#address_size, #address_size=, #annotate, #annotate=, #annotate?, #annotate_indepth_list, #annotate_indepth_list=, #annotate_level, #annotate_level=, #annotate_list, #annotate_list=, #architecture, #architecture=, #array_start, #array_start=, #chain_code, #chain_code=, #chain_code?, #debug, #debug=, #debug?, #debug_source, #debug_source=, #debug_source?, #decl_module, #decl_module=, #decl_module?, #default_align, #default_align=, #default_int_signed, #default_int_signed=, #default_int_signed?, #default_int_size, #default_int_size=, #default_real_size, #default_real_size=, #disable_openmp, #disable_openmp=, #disable_openmp?, #ffi, #ffi=, #ffi?, #fortran_line_length, #fortran_line_length=, #get_address_size, #get_annotate, #get_annotate_indepth_list, #get_annotate_level, #get_annotate_list, #get_architecture, #get_array_start, #get_chain_code, #get_debug, #get_debug_source, #get_decl_module, #get_default_align, #get_default_int_signed, #get_default_int_size, #get_default_real_size, #get_disable_openmp, #get_ffi, #get_fortran_line_length, #get_indent_increment, #get_indent_level, #get_keep_temp, #get_lang, #get_model, #get_optimizer_log, #get_optimizer_log_file, #get_output, #get_replace_constants, #get_use_vla, #get_verbose, #indent_increment, #indent_increment=, #indent_level, #indent_level=, #keep_temp, #keep_temp=, #keep_temp?, #lang, #lang=, #model, #model=, #optimizer_log, #optimizer_log=, #optimizer_log?, #optimizer_log_file, #optimizer_log_file=, #output, #output=, #replace_constants, #replace_constants=, #replace_constants?, #set_address_size, #set_annotate, #set_annotate_indepth_list, #set_annotate_level, #set_annotate_list, #set_architecture, #set_array_start, #set_chain_code, #set_debug, #set_debug_source, #set_decl_module, #set_default_align, #set_default_int_signed, #set_default_int_size, #set_default_real_size, #set_disable_openmp, #set_ffi, #set_fortran_line_length, #set_indent_increment, #set_indent_level, #set_keep_temp, #set_lang, #set_model, #set_optimizer_log, #set_optimizer_log_file, #set_output, #set_replace_constants, #set_use_vla, #set_verbose, #use_vla, #use_vla=, #use_vla?, #verbose, #verbose=, #verbose?
Methods included from Inspectable
Methods included from Arithmetic
#!, #!=, #*, #**, #+, #+@, #-, #-@, #/, #<, #<=, #==, #===, #>, #>=, #and, #cast, #components, #dereference, #or, #reference
Methods included from Intrinsics
check_coverage, get_conversion_path, get_vector_decl, get_vector_decl_ARM, get_vector_decl_X86, get_vector_name, intrinsics, intrinsics_by_vector_name, type_name_ARM, type_name_X86, vector_type_name
Methods inherited from Operator
Constructor Details
#initialize(source, return_type) ⇒ Set
Returns a new instance of Set.
318 319 320 321 |
# File 'lib/BOAST/Language/Operators.rb', line 318 def initialize(source, return_type) @source = source @return_type = return_type.to_var end |
Instance Attribute Details
#return_type ⇒ Object (readonly)
Returns the value of attribute return_type.
316 317 318 |
# File 'lib/BOAST/Language/Operators.rb', line 316 def return_type @return_type end |
#source ⇒ Object (readonly)
Returns the value of attribute source.
315 316 317 |
# File 'lib/BOAST/Language/Operators.rb', line 315 def source @source end |
Instance Method Details
#pr ⇒ Object
368 369 370 371 372 373 374 375 |
# File 'lib/BOAST/Language/Operators.rb', line 368 def pr s="" s += indent s += to_s s += ";" if [C, CL, CUDA].include?( lang ) output.puts s return self end |
#to_s ⇒ Object
364 365 366 |
# File 'lib/BOAST/Language/Operators.rb', line 364 def to_s return to_var.to_s end |
#to_var ⇒ Object
327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 |
# File 'lib/BOAST/Language/Operators.rb', line 327 def to_var if lang == C or lang == CL and @return_type.type.vector_length > 1 then if @source.kind_of?( Array ) then raise OperatorError, "Invalid array length!" unless @source.length == @return_type.type.vector_length return @return_type.copy("(#{@return_type.type.decl})( #{@source.join(", ")} )", DISCARD_OPTIONS) if lang == CL return Set(@source.first, @return_type).to_var if @source.uniq.size == 1 begin instruction = intrinsics(:SET, @return_type.type) raise IntrinsicsError unless instruction return @return_type.copy("#{instruction}( #{@source.join(", ")} )", DISCARD_OPTIONS) rescue IntrinsicsError instruction = intrinsics(:SET_LANE, @return_type.type) raise IntrinsicsError, "Missing instruction for SET_LANE on #{get_architecture_name}!" unless instruction s = Set(0, @return_type).to_s @source.each_with_index { |v,i| s = "#{instruction}( #{v}, #{s}, #{i} )" } return @return_type.copy(s, DISCARD_OPTIONS) end elsif @source.class != Variable or @source.type.vector_length == 1 then return @return_type.copy("(#{@return_type.type.decl})( #{@source} )", DISCARD_OPTIONS) if lang == CL if (@source.is_a?(Numeric) and @source == 0) or (@source.class == Variable and @source.constant == 0) then begin instruction = intrinsics(:SETZERO, @return_type.type) return @return_type.copy("#{instruction}( )", DISCARD_OPTIONS) if instruction rescue IntrinsicsError end end instruction = intrinsics(:SET1, @return_type.type) return @return_type.copy("#{instruction}( #{@source} )", DISCARD_OPTIONS) elsif @return_type.type != @source.type return @return_type.copy("#{Operator.convert(@source, @return_type.type)}", DISCARD_OPTIONS) end end return @return_type.copy("#{@source}", DISCARD_OPTIONS) end |
#type ⇒ Object
323 324 325 |
# File 'lib/BOAST/Language/Operators.rb', line 323 def type return @return_type.type end |