Main Page | Data Structures | File List | Globals

execute.c File Reference


Detailed Description

Author:
Raviraj Joshi (raviraj@student.unsw.edu.au)

Saeid Nooshabadi (saeid@unsw.edu.au)

Date:
1 August 2004
Version:
1.1
The 'execute.c' file contains functions that execute the following floating point instructions:

See the 'CHANGES.txt' file for list of modifications made to this file.

Definition in file execute.c.

#include "armvfp.h"

Include dependency graph for execute.c:

Include dependency graph

Go to the source code of this file.

Functions

void execute_dp (void)
void execute_regt (unsigned long int *BankedReg)
void execute_ldst (unsigned long int *BankedReg)


Function Documentation

void execute_dp void   ) 
 

The 'execute_dp' function executes the following decoded ARM VFP data processing instructions:

  • floating point addition
    • FADDS or FADDD: Fd = Fn + Fm
  • fused multiplication and addition
    • FMACS or FMACD: Fd = Fd + (Fn * Fm)
    • FNMACS or FNMACD: Fd = Fd - (Fn * Fm)
    • FMSCS or FMSCD: Fd = -Fd + (Fn * Fm)
    • FNMSCS or FNMSCD: Fd = -Fd - (Fn * Fm)
  • subtraction
    • FSUBS or FSUBD: Fd = Fn - Fm
  • multiplication
    • FMULS or FMULD: Fd = Fn * Fm
    • FNMULS or FNMULD: Fd = -(Fn * Fm)
  • division
    • FDIVS or FDIVD: Fd = Fn / Fm
  • copy
    • FCPYS or FCPYD: Fd = Fm
  • absolute
    • FABSS or FABSD: Fd = abs(Fm)
  • negation
    • FNEGS or FNEGD: Fd = -Fm
  • square root
    • FSQRTS or FSQRTD: Fd = sqrt(Fm)
  • compare
    • FCMPS or FCMPD: Compare Fd with Fm, no exceptions on quiet NaNs
    • FCMPES or FCMPED: Compare Fd with Fm, with exceptions on quiet NaNs
    • FCMPZS or FCMPZD: Compare Fd with 0, no exceptions on quiet NaNs
    • FCMPEZS or FCMPEZD: Compare Fd with 0, with exceptions on quiet NaNs
  • conversions
    • FUITOS or FUITOD: Unsigned integer -> floating point conversions
    • FSITOS or FSITOD: Signed integer -> floating point conversions
    • FCVTDS or FCVTSD: Single <-> Double precision conversions
    • FTUIOS or FTUIOD: Floating point -> unsigned integer conversions
    • FTOUIZS or FTOUIZD: Floating point -> unsigned integer conversions, RZ mode
    • FTOSIS or FTOSID: Floating point -> signed integer conversions
    • FTOSIZS or FTOSIZD: Floating point -> signed integer conversions, RZ mode

Definition at line 109 of file execute.c.

References check_flag(), Instruction::cp_num, Instruction::ext_opcode, fabsolute(), faddition(), fcompare(), fcompare_exp(), fcompare_zero(), fcompare_zero_exp(), fcopy(), fcvt_float_signedint(), fcvt_float_unsignedint(), fcvt_float_unsignedint(), fcvt_signedint_float(), fcvt_single_double(), fcvt_unsignedint_float(), Instruction::fd, fdivision(), fetch_data(), Instruction::fm, fmultiplication(), Instruction::fn, fnegation(), fsqrt(), fsubtraction(), fused_mul_add(), inst, Instruction::opcode, return_data(), and Float::sign.

Referenced by vfp_data_proc().

Here is the call graph for this function:

void execute_ldst unsigned long int *  BankedReg  ) 
 

Parameters:
BankedReg The banked register.
The 'execute_ldst' function executes the following decoded ARM VFP load store instructions:

  • store a number of single precision float registers to memory
  • load a number of single precision float registers from memory
  • store a number of double precision float registers to memory
  • load a number of double precision float registers from memory
  • store a number of single precision float registers to memory with increment Rn
  • load a number of single precision float registers from memory with increment Rn
  • store a number of double precision float registers to memory with increment Rn
  • load a number of double precision float registers from memory with increment Rn
  • store a single precision float register to memory with negative offset
  • load a single precision float register from memory with negative offset
  • store a double precision float register to memory with negative offset
  • load a double precision float register from memory with negative offset
  • store a number of single precision float registers to memory with decrement Rn
  • load a number of single precision float registers from memory with decrement Rn
  • store a number of double precision float registers to memory with decrement Rn
  • load a number of double precision float registers from memory with decrement Rn
  • store a single precision float registers to memory with positive offset
  • load a single precision float registers from memory with positive offset
  • store a double precision float registers to memory with positive offset
  • load a double precision float registers from memory with positive offset

Definition at line 416 of file execute.c.

References Instruction::cp_num, ENDIAN, Instruction::fd, Instruction::fn, inst, Instruction::instruction, Instruction::opcode, and s.

Referenced by vfp_ld_st().

void execute_regt unsigned long int *  BankedReg  ) 
 

Parameters:
BankedReg The banked register.
The 'execute_regt' function executes the following decoded ARM VFP register transfer instructions:

  • FMSR: Sn = Rd
  • FMRS: Rd = Sn
  • FMDLR: Dn[31:0] -> Rd
  • FMRDL: Rd = Dn[31:0]
  • FMDHR: Dn[63:32] -> Rd
  • FMRDH: Rd = Dn[63:32]
  • FMXR: SystemReg(fn) = Rd
  • FMRX: Rd = SystemReg(fn)

Definition at line 296 of file execute.c.

References Instruction::cp_num, ENDIAN, Instruction::fd, Instruction::fn, fpexc, fpscr, fpsid, inst, Instruction::opcode, and s.

Referenced by vfp_reg_tran().


Generated on Mon Aug 2 20:08:57 2004 for ARM Vector Floating Point Co-processor Emulator by doxygen 1.3.7