Keil™, An ARM® Company

RealView Compiler Reference Guide

Technical Support

On-Line Manuals

RealView Compiler Reference Guide

Preface
Introduction
Compiler Command-line Options
Language Extensions
Compiler-specific Features
Keywords and operators
__align
__alignof__
__ALIGNOF__
__asm
__forceinline
__global_reg
__inline
__int64
__INTADDR__
__irq
__packed
__pure
__smc
__softfp
__svc
__svc_indirect
__svc_indirect_r7
__value_in_regs
__weak
__writeonly
__declspec attributes
__declspec(dllexport)
__declspec(dllimport)
__declspec(noinline)
__declspec(noreturn)
__declspec(nothrow)
__declspec(notshared)
__declspec(thread)
Function attributes
__attribute__((alias))
__attribute__((always_inline))
__attribute__((const))
__attribute__((deprecated))
__attribute__((malloc))
__attribute__((noinline))
__attribute__((noreturn))
__attribute__((pure))
__attribute__((section))
__attribute__((unused))
__attribute__((used))
__attribute__((weak))
Type attributes
__attribute__((aligned))
__attribute((packed))
__attribute__((transparent_union))
Variable attributes
__attribute__((alias))
__attribute__((at(address)))
__attribute__((aligned))
__attribute__((deprecated))
__attribute__((packed))
__attribute__((section))
__attribute__((transparent_union))
__attribute__((unused))
__attribute__((used))
__attribute__((weak))
__attribute__((zero_init))
Pragmas
#pragma [no_]anon_unions
#pragma arm
#pragma arm section [section_sort_list]
#pragma diag_default tag[,tag,...]
#pragma diag_error tag[,tag,...]
#pragma diag_remark tag[,tag,...]
#pragma diag_suppress tag[,tag,...]
#pragma diag_warning tag[, tag, ...]
#pragma [no_]exceptions_unwind
#pragma hdrstop
#pragma import symbol_name
#pragma [no_]inline
#pragma no_pch
#pragma Onum
#pragma once
#pragma Ospace
#pragma Otime
#pragma pop
#pragma push
#pragma [no_]softfp_linkage
#pragma unroll [(n)]
#pragma unroll_completely
#pragma thumb
Instruction intrinsics
__breakpoint
__builtin_clz
__builtin_constant_p
__builtin_expect
__builtin_frame_address
__builtin_return_address
__builtin_popcount
__cdp
__clrex
__clz
__current_pc
__current_sp
__disable_fiq
__disable_irq
__enable_fiq
__enable_irq
__fabs
__fabsf
__force_stores
__ldrex
__ldrt
__memory_changed
__nop
__pld
__pli
__qadd
__qdbl
__qsub
__rbit
__rev
__return_address
__ror
__schedule_barrier
__semihost
__sev
__sqrt
__sqrtf
__ssat
__strex
__strt
__swp
__usat
__wfe
__wfi
__yield
ARMv6 SIMD intrinsics
ETSI basic operations
C55x intrinsics
Named register variables
Compiler predefines
Predefined macros
Function names
C and C++ Implementation Details
Via File Syntax
Standard C Implementation Definition
Standard C++ Implementation Definition
C and C++ Compiler Implementation Limits

__value_in_regs

4.1.18. __value_in_regs

The __value_in_regs qualifier instructs the compiler to return a structure of up to four integer words in integer registers or up to four floats or doubles in floating‑point registers rather than using memory.

__value_in_regs is a function qualifier. It affects the type of a function.

Syntax

__value_in_regs return-type function-name([argument-list]);

Where:

return‑type

is the type of a structure of up to four words in size.

Usage

Declaring a function __value_in_regs can be useful when calling functions that return more than one result.

Restrictions

A C++ function cannot return a __value_in_regs structure if the structure requires copy constructing.

If a virtual function declared as __value_in_regs is to be overridden, the overriding function must also be declared as __value_in_regs. If the functions do not match, the compiler generates an error.

Errors

Where the structure returned in a function qualified by __value_in_regs is too big, a warning is produced and the __value_in_regs structure is then ignored.

Example

typedef struct int64_struct
{
    unsigned int lo;
    unsigned int hi;
} int64_struct;

__value_in_regs extern
    int64_struct mul64(unsigned a, unsigned b);

See also

Copyright © 2007 ARM Limited. All rights reserved.ARM DUI 0376A