remove FFTS, move 3rd party package
This commit is contained in:
8
FFTS/.gitignore
vendored
8
FFTS/.gitignore
vendored
@@ -1,8 +0,0 @@
|
||||
.DS_Store
|
||||
/.build
|
||||
/Packages
|
||||
xcuserdata/
|
||||
DerivedData/
|
||||
.swiftpm/configuration/registries.json
|
||||
.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
|
||||
.netrc
|
||||
@@ -1,24 +0,0 @@
|
||||
// swift-tools-version: 6.0
|
||||
// The swift-tools-version declares the minimum version of Swift required to build this package.
|
||||
|
||||
import PackageDescription
|
||||
|
||||
let package = Package(
|
||||
name: "FFTS",
|
||||
products: [
|
||||
// Products define the executables and libraries a package produces, making them visible to other packages.
|
||||
.library(
|
||||
name: "FFTS",
|
||||
targets: ["FFTS"]),
|
||||
],
|
||||
targets: [
|
||||
.plugin(name: "CMakePlugin", capability: .buildTool()),
|
||||
.target(
|
||||
name: "FFTS",
|
||||
plugins: ["CMakePlugin"]),
|
||||
.testTarget(
|
||||
name: "FFTSTests",
|
||||
dependencies: ["FFTS"]
|
||||
),
|
||||
]
|
||||
)
|
||||
@@ -1,3 +0,0 @@
|
||||
import PackagePlugin
|
||||
|
||||
@main
|
||||
29
FFTS/Sources/FFTS/.gitignore
vendored
29
FFTS/Sources/FFTS/.gitignore
vendored
@@ -1,29 +0,0 @@
|
||||
*.o
|
||||
*.Po
|
||||
*.a
|
||||
*.la
|
||||
*.lai
|
||||
*.lo
|
||||
*.Plo
|
||||
*.so
|
||||
*~
|
||||
*.log
|
||||
*.swp
|
||||
*.cache/*
|
||||
|
||||
*Makefile
|
||||
|
||||
config.h
|
||||
config.status
|
||||
compile
|
||||
libtool
|
||||
ffts.pc
|
||||
stamp-h1
|
||||
tests/test
|
||||
|
||||
java/android/local.properties
|
||||
java/android/gen/*
|
||||
java/android/obj/*
|
||||
java/android/bin/*
|
||||
|
||||
build
|
||||
@@ -1,12 +0,0 @@
|
||||
language: c
|
||||
os:
|
||||
- linux
|
||||
- osx
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- cmake
|
||||
sources:
|
||||
- kubuntu-backports
|
||||
script:
|
||||
- mkdir build && cd build && cmake .. && cmake --build .
|
||||
@@ -1,6 +0,0 @@
|
||||
FFTS was developed at the University of Waikato by Anthony Blake <amb@anthonix.com>
|
||||
|
||||
The following authors have also graciously contributed code:
|
||||
|
||||
Michael Zucchi <notzed@gmail.com> -- JNI java/android support
|
||||
Michael Cree <mcree@orcon.net.nz> -- Architecture specific code, including support for Altivec and DEC Alpha
|
||||
@@ -1,626 +0,0 @@
|
||||
cmake_minimum_required(VERSION 2.8.12 FATAL_ERROR)
|
||||
|
||||
project(ffts C ASM)
|
||||
|
||||
# TODO: to support AutoConfigure building, this should came from "template" file
|
||||
set(FFTS_MAJOR 0)
|
||||
set(FFTS_MINOR 9)
|
||||
set(FFTS_MICRO 0)
|
||||
|
||||
set(FFTS_VERSION "${FFTS_MAJOR}.${FFTS_MINOR}.${FFTS_MICRO}")
|
||||
|
||||
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
|
||||
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
||||
|
||||
# default build type is Debug which means no optimization
|
||||
if(NOT CMAKE_BUILD_TYPE)
|
||||
set(CMAKE_BUILD_TYPE "Release")
|
||||
endif(NOT CMAKE_BUILD_TYPE)
|
||||
|
||||
# installation parameters
|
||||
set(INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/include/ffts)
|
||||
set(LIB_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/lib)
|
||||
|
||||
|
||||
set(CMAKE_COMPILER_GCCLIKE OFF)
|
||||
if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
|
||||
# using Clang
|
||||
set(CMAKE_COMPILER_GCCLIKE ON)
|
||||
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
||||
# using GCC
|
||||
set(CMAKE_COMPILER_GCCLIKE ON)
|
||||
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")
|
||||
# using Intel C++
|
||||
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||
# using Visual Studio C++
|
||||
endif()
|
||||
|
||||
|
||||
# common options
|
||||
|
||||
# !!!! FOR TESTING ONLY !!!!
|
||||
option(ENABLE_AVX
|
||||
"Enables AVX instructions." OFF
|
||||
)
|
||||
# !!!! FOR TESTING ONLY !!!!
|
||||
option(ENABLE_DOUBLE
|
||||
"Enables double precision" OFF
|
||||
)
|
||||
|
||||
option(ENABLE_NEON
|
||||
"Enables the use of NEON instructions." OFF
|
||||
)
|
||||
|
||||
option(ENABLE_VFP
|
||||
"Enables the use of VFP instructions." OFF
|
||||
)
|
||||
|
||||
option(DISABLE_DYNAMIC_CODE
|
||||
"Disables the use of dynamic machine code generation." OFF
|
||||
)
|
||||
|
||||
option(GENERATE_POSITION_INDEPENDENT_CODE
|
||||
"Generate position independent code" OFF
|
||||
)
|
||||
|
||||
option(ENABLE_SHARED
|
||||
"Enable building a shared library." OFF
|
||||
)
|
||||
|
||||
option(ENABLE_STATIC
|
||||
"Enable building a static library." ON
|
||||
)
|
||||
|
||||
include(CheckCSourceCompiles)
|
||||
include(CheckCSourceRuns)
|
||||
include(CheckFunctionExists)
|
||||
include(CheckIncludeFile)
|
||||
include(CheckSymbolExists)
|
||||
|
||||
# Ensure defined when building FFTS (as opposed to using it from
|
||||
# another project). Used to export functions from Windows DLL.
|
||||
add_definitions(-DFFTS_BUILD)
|
||||
|
||||
# check existence of various headers
|
||||
check_include_file(inttypes.h HAVE_INTTYPES_H)
|
||||
check_include_file(malloc.h HAVE_MALLOC_H)
|
||||
check_include_file(mm_malloc.h HAVE_MM_MALLOC_H)
|
||||
check_include_file(stdint.h HAVE_STDINT_H)
|
||||
check_include_file(stdlib.h HAVE_STDLIB_H)
|
||||
check_include_file(string.h HAVE_STRING_H)
|
||||
check_include_file(sys/mman.h HAVE_SYS_MMAN_H)
|
||||
check_include_file(unistd.h HAVE_UNISTD_H)
|
||||
|
||||
if(HAVE_INTTYPES_H)
|
||||
add_definitions(-DHAVE_INTTYPES_H)
|
||||
endif(HAVE_INTTYPES_H)
|
||||
|
||||
if(HAVE_MALLOC_H)
|
||||
add_definitions(-DHAVE_MALLOC_H)
|
||||
endif(HAVE_MALLOC_H)
|
||||
|
||||
if(HAVE_MM_MALLOC_H)
|
||||
add_definitions(-DHAVE_MM_MALLOC_H)
|
||||
endif(HAVE_MM_MALLOC_H)
|
||||
|
||||
if(HAVE_STDINT_H)
|
||||
add_definitions(-DHAVE_STDINT_H)
|
||||
endif(HAVE_STDINT_H)
|
||||
|
||||
if(HAVE_STDLIB_H)
|
||||
add_definitions(-DHAVE_STDLIB_H)
|
||||
endif(HAVE_STDLIB_H)
|
||||
|
||||
if(HAVE_STRING_H)
|
||||
add_definitions(-DHAVE_STRING_H)
|
||||
endif(HAVE_STRING_H)
|
||||
|
||||
if(HAVE_SYS_MMAN_H)
|
||||
add_definitions(-DHAVE_SYS_MMAN_H)
|
||||
endif(HAVE_SYS_MMAN_H)
|
||||
|
||||
if(HAVE_UNISTD_H)
|
||||
add_definitions(-DHAVE_UNISTD_H)
|
||||
endif(HAVE_UNISTD_H)
|
||||
|
||||
# check existence of various declarations
|
||||
check_symbol_exists(memalign malloc.h HAVE_DECL_MEMALIGN)
|
||||
check_symbol_exists(posix_memalign stdlib.h HAVE_DECL_POSIX_MEMALIGN)
|
||||
check_symbol_exists(valloc stdlib.h HAVE_DECL_VALLOC)
|
||||
check_symbol_exists(_mm_malloc malloc.h HAVE_DECL__MM_MALLOC)
|
||||
|
||||
if(HAVE_DECL_MEMALIGN)
|
||||
add_definitions(-DHAVE_DECL_MEMALIGN)
|
||||
endif(HAVE_DECL_MEMALIGN)
|
||||
|
||||
if(HAVE_DECL_POSIX_MEMALIGN)
|
||||
add_definitions(-DHAVE_DECL_POSIX_MEMALIGN)
|
||||
endif(HAVE_DECL_POSIX_MEMALIGN)
|
||||
|
||||
if(HAVE_DECL_VALLOC)
|
||||
add_definitions(-DHAVE_DECL_VALLOC)
|
||||
endif(HAVE_DECL_VALLOC)
|
||||
|
||||
if(HAVE_DECL__MM_MALLOC)
|
||||
add_definitions(-DHAVE_DECL__MM_MALLOC)
|
||||
endif(HAVE_DECL__MM_MALLOC)
|
||||
|
||||
# check existence of various functions
|
||||
check_function_exists(memalign HAVE_MEMALIGN)
|
||||
check_function_exists(posix_memalign HAVE_POSIX_MEMALIGN)
|
||||
check_function_exists(valloc HAVE_VALLOC)
|
||||
check_function_exists(_mm_malloc HAVE__MM_MALLOC)
|
||||
|
||||
if(HAVE_MEMALIGN)
|
||||
add_definitions(-DHAVE_MEMALIGN)
|
||||
endif(HAVE_MEMALIGN)
|
||||
|
||||
if(HAVE_POSIX_MEMALIGN)
|
||||
add_definitions(-DHAVE_POSIX_MEMALIGN)
|
||||
endif(HAVE_POSIX_MEMALIGN)
|
||||
|
||||
if(HAVE_VALLOC)
|
||||
add_definitions(-DHAVE_VALLOC)
|
||||
endif(HAVE_VALLOC)
|
||||
|
||||
if(HAVE__MM_MALLOC)
|
||||
add_definitions(-DHAVE__MM_MALLOC)
|
||||
endif(HAVE__MM_MALLOC)
|
||||
|
||||
# backup flags
|
||||
set(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS})
|
||||
|
||||
# Determinate if we are cross-compiling
|
||||
if(NOT CMAKE_CROSSCOMPILING)
|
||||
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm")
|
||||
# Determinate ARM architecture
|
||||
|
||||
# Try to execute quietly without messages
|
||||
set(CMAKE_REQUIRED_QUIET 1)
|
||||
|
||||
# The test for ARM architecture
|
||||
set(TEST_SOURCE_CODE "int main() { return 0; }")
|
||||
|
||||
# GCC documentation says "native" is only supported on Linux, but let's try
|
||||
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS_SAVE} -march=native")
|
||||
check_c_source_runs("${TEST_SOURCE_CODE}" GCC_MARCH_NATIVE_FLAG_SUPPORTED)
|
||||
|
||||
if(NOT GCC_MARCH_NATIVE_FLAG_SUPPORTED)
|
||||
# Fallback trying generic ARMv7
|
||||
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS_SAVE} -march=armv7-a")
|
||||
check_c_source_runs("${TEST_SOURCE_CODE}" GCC_MARCH_ARMV7A_FLAG_SUPPORTED)
|
||||
|
||||
if(NOT GCC_MARCH_ARMV7A_FLAG_SUPPORTED)
|
||||
# Fallback trying generic ARMv6
|
||||
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS_SAVE} -march=armv6")
|
||||
check_c_source_runs("${TEST_SOURCE_CODE}" GCC_MARCH_ARMV6_FLAG_SUPPORTED)
|
||||
|
||||
if(NOT GCC_MARCH_ARMV6_FLAG_SUPPORTED)
|
||||
message(WARNING "FFTS failed to determinate ARM architecture")
|
||||
set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE})
|
||||
else()
|
||||
message("FFTS is build using 'march=armv6'")
|
||||
set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -march=armv6")
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv6")
|
||||
endif(NOT GCC_MARCH_ARMV6_FLAG_SUPPORTED)
|
||||
else()
|
||||
message("FFTS is build using 'march=armv7-a'")
|
||||
set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -march=armv7-a")
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv7-a")
|
||||
endif(NOT GCC_MARCH_ARMV7A_FLAG_SUPPORTED)
|
||||
else()
|
||||
message("FFTS is build using 'march=native'")
|
||||
set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -march=native")
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=native")
|
||||
endif(NOT GCC_MARCH_NATIVE_FLAG_SUPPORTED)
|
||||
|
||||
# Determinate what floating-point hardware (or hardware emulation) is available
|
||||
set(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS})
|
||||
|
||||
# The test for ARM NEON support
|
||||
set(TEST_SOURCE_CODE "
|
||||
#include <arm_neon.h>
|
||||
int main()
|
||||
{
|
||||
float32x4_t v;
|
||||
float zeros[4] = {0.0f, 0.0f, 0.0f, 0.0f};
|
||||
v = vld1q_f32(zeros);
|
||||
return 0;
|
||||
}"
|
||||
)
|
||||
|
||||
# Test running with -mfpu=neon and -mfloat-abi=hard
|
||||
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS_SAVE} -mfpu=neon -mfloat-abi=hard")
|
||||
check_c_source_runs("${TEST_SOURCE_CODE}" NEON_HARDFP_SUPPORTED)
|
||||
|
||||
if(NOT NEON_HARDFP_SUPPORTED)
|
||||
# Test running with -mfpu=neon and -mfloat-abi=softfp
|
||||
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS_SAVE} -mfpu=neon -mfloat-abi=softfp")
|
||||
check_c_source_runs("${TEST_SOURCE_CODE}" NEON_SOFTFP_SUPPORTED)
|
||||
|
||||
if(NOT NEON_SOFTFP_SUPPORTED)
|
||||
if(ENABLE_NEON)
|
||||
message(FATAL_ERROR "FFTS cannot enable NEON on this platform")
|
||||
endif(ENABLE_NEON)
|
||||
else()
|
||||
message("FFTS is using 'neon' FPU and 'softfp' float ABI")
|
||||
set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -mfpu=neon -mfloat-abi=softfp")
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpu=neon -mfloat-abi=softfp")
|
||||
set(ENABLE_NEON ON)
|
||||
endif(NOT NEON_SOFTFP_SUPPORTED)
|
||||
else()
|
||||
message("FFTS is using 'neon' FPU and 'hard' float ABI")
|
||||
set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -mfpu=neon -mfloat-abi=hard")
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpu=neon -mfloat-abi=hard")
|
||||
set(ENABLE_NEON ON)
|
||||
endif(NOT NEON_HARDFP_SUPPORTED)
|
||||
|
||||
# Fallback using VFP if NEON is not supported
|
||||
if(NOT NEON_HARDFP_SUPPORTED AND NOT NEON_SOFTFP_SUPPORTED)
|
||||
# Test for ARM VFP support
|
||||
set(TEST_SOURCE_CODE "
|
||||
double sum(double a, double b)
|
||||
{
|
||||
return a + b;
|
||||
}
|
||||
int main()
|
||||
{
|
||||
double s1, s2, v1 = 1.0, v2 = 2.0, v3 = 1.0e-322;
|
||||
s1 = sum(v1, v2);
|
||||
s2 = sum(v3, v3);
|
||||
return 0;
|
||||
}"
|
||||
)
|
||||
|
||||
# Test running with -mfpu=vfp
|
||||
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS_SAVE} -mfpu=vfp")
|
||||
check_c_source_runs("${TEST_SOURCE_CODE}" VFP_SUPPORTED)
|
||||
|
||||
if(NOT VFP_SUPPORTED)
|
||||
# Fallback using emulation if VFP is not supported
|
||||
if(ENABLE_VFP)
|
||||
message(FATAL_ERROR "FFTS cannot enable VFP on this platform")
|
||||
endif(ENABLE_VFP)
|
||||
|
||||
message(WARNING "FFTS is using 'soft' FPU")
|
||||
else()
|
||||
message("FFTS is using 'vfp' FPU")
|
||||
set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -mfpu=vfp")
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpu=vfp")
|
||||
set(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS})
|
||||
set(ENABLE_VFP ON)
|
||||
endif(NOT VFP_SUPPORTED)
|
||||
|
||||
# Test running with -mfloat-abi=hard
|
||||
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS_SAVE} -mfloat-abi=hard")
|
||||
|
||||
# Use the same test as before
|
||||
check_c_source_runs("${TEST_SOURCE_CODE}" HARDFP_SUPPORTED)
|
||||
|
||||
if(NOT HARDFP_SUPPORTED)
|
||||
# Test running with -mfloat-abi=softfp
|
||||
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS_SAVE} -mfloat-abi=softfp")
|
||||
check_c_source_runs("${TEST_SOURCE_CODE}" SOFTFP_SUPPORTED)
|
||||
|
||||
if(NOT SOFTFP_SUPPORTED)
|
||||
# Most likely development libraries are missing
|
||||
message(WARNING "FFTS is using 'soft' float ABI")
|
||||
else()
|
||||
message("FFTS is using 'softfp' float ABI")
|
||||
set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -mfloat-abi=softfp")
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfloat-abi=softfp")
|
||||
endif(NOT SOFTFP_SUPPORTED)
|
||||
else()
|
||||
message("FFTS is using 'hard' float ABI")
|
||||
set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -mfloat-abi=hard")
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfloat-abi=hard")
|
||||
endif(NOT HARDFP_SUPPORTED)
|
||||
endif(NOT NEON_HARDFP_SUPPORTED AND NOT NEON_SOFTFP_SUPPORTED)
|
||||
else()
|
||||
# enable SSE code generation
|
||||
if(CMAKE_COMPILER_GCCLIKE)
|
||||
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS_SAVE} -msse")
|
||||
endif(CMAKE_COMPILER_GCCLIKE)
|
||||
|
||||
# check if the platform has support for SSE intrinsics
|
||||
check_include_file(xmmintrin.h HAVE_XMMINTRIN_H)
|
||||
if(HAVE_XMMINTRIN_H)
|
||||
add_definitions(-DHAVE_SSE)
|
||||
set(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS})
|
||||
|
||||
# TODO: not the right place
|
||||
if(ENABLE_AVX)
|
||||
add_definitions(-DHAVE_AVX)
|
||||
endif(ENABLE_AVX)
|
||||
if(ENABLE_DOUBLE)
|
||||
add_definitions(-DFFTS_DOUBLE)
|
||||
endif(ENABLE_DOUBLE)
|
||||
endif(HAVE_XMMINTRIN_H)
|
||||
|
||||
# enable SSE2 code generation
|
||||
if(CMAKE_COMPILER_GCCLIKE)
|
||||
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS_SAVE} -msse2")
|
||||
endif(CMAKE_COMPILER_GCCLIKE)
|
||||
|
||||
# check if the platform has support for SSE2 intrinsics
|
||||
check_include_file(emmintrin.h HAVE_EMMINTRIN_H)
|
||||
if(HAVE_EMMINTRIN_H)
|
||||
add_definitions(-DHAVE_SSE2)
|
||||
set(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS})
|
||||
endif(HAVE_EMMINTRIN_H)
|
||||
|
||||
# enable SSE3 code generation
|
||||
if(CMAKE_COMPILER_GCCLIKE)
|
||||
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS_SAVE} -msse3")
|
||||
endif(CMAKE_COMPILER_GCCLIKE)
|
||||
|
||||
# check if the platform has support for SSE3 intrinsics
|
||||
check_include_file(pmmintrin.h HAVE_PMMINTRIN_H)
|
||||
if(HAVE_PMMINTRIN_H)
|
||||
add_definitions(-DHAVE_PMMINTRIN_H)
|
||||
add_definitions(-DHAVE_SSE3)
|
||||
set(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS})
|
||||
else()
|
||||
# check if the platform has specific intrinsics
|
||||
check_include_file(intrin.h HAVE_INTRIN_H)
|
||||
if(HAVE_INTRIN_H)
|
||||
add_definitions(-DHAVE_INTRIN_H)
|
||||
|
||||
check_c_source_compiles("
|
||||
#include<intrin.h>
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
(void) argv;
|
||||
(void) argc;
|
||||
return _mm_movemask_ps(_mm_moveldup_ps(_mm_set_ss(1.0f)));
|
||||
}" HAVE__MM_MOVELDUP_PS
|
||||
)
|
||||
|
||||
if(HAVE__MM_MOVELDUP_PS)
|
||||
# assume that we have all SSE3 intrinsics
|
||||
add_definitions(-DHAVE_SSE3)
|
||||
endif(HAVE__MM_MOVELDUP_PS)
|
||||
endif(HAVE_INTRIN_H)
|
||||
endif(HAVE_PMMINTRIN_H)
|
||||
endif(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm")
|
||||
else()
|
||||
# TODO: Add detections for compiler support and headers
|
||||
endif(NOT CMAKE_CROSSCOMPILING)
|
||||
|
||||
# restore flags
|
||||
set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE})
|
||||
|
||||
# compiler settings
|
||||
if(MSVC)
|
||||
# enable all warnings but also disable some..
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W4 /wd4127")
|
||||
|
||||
# mark debug versions
|
||||
set(CMAKE_DEBUG_POSTFIX "d")
|
||||
|
||||
add_definitions(-D_USE_MATH_DEFINES)
|
||||
elseif(CMAKE_COMPILER_GCCLIKE)
|
||||
include(CheckCCompilerFlag)
|
||||
include(CheckLibraryExists)
|
||||
|
||||
# enable all warnings
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra")
|
||||
|
||||
# check if we can control visibility of symbols
|
||||
check_c_compiler_flag(-fvisibility=hidden HAVE_GCC_VISIBILITY)
|
||||
if(HAVE_GCC_VISIBILITY)
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
|
||||
add_definitions(-DHAVE_GCC_VISIBILITY)
|
||||
endif(HAVE_GCC_VISIBILITY)
|
||||
|
||||
# some systems need libm for the math functions to work
|
||||
check_library_exists(m pow "" HAVE_LIBM)
|
||||
if(HAVE_LIBM)
|
||||
list(APPEND CMAKE_REQUIRED_LIBRARIES m)
|
||||
list(APPEND FFTS_EXTRA_LIBRARIES m)
|
||||
endif(HAVE_LIBM)
|
||||
|
||||
if(HAVE_PMMINTRIN_H)
|
||||
add_definitions(-msse3)
|
||||
elseif(HAVE_EMMINTRIN_H)
|
||||
add_definitions(-msse2)
|
||||
elseif(HAVE_XMMINTRIN_H)
|
||||
add_definitions(-msse)
|
||||
endif(HAVE_PMMINTRIN_H)
|
||||
endif(MSVC)
|
||||
|
||||
include_directories(include)
|
||||
include_directories(src)
|
||||
include_directories(${CMAKE_CURRENT_BINARY_DIR})
|
||||
|
||||
set(FFTS_HEADERS
|
||||
include/ffts.h
|
||||
)
|
||||
|
||||
set(FFTS_SOURCES
|
||||
src/ffts_attributes.h
|
||||
src/ffts.c
|
||||
src/ffts_chirp_z.c
|
||||
src/ffts_chirp_z.h
|
||||
src/ffts_cpu.c
|
||||
src/ffts_cpu.h
|
||||
src/ffts_internal.h
|
||||
src/ffts_nd.c
|
||||
src/ffts_nd.h
|
||||
src/ffts_real.h
|
||||
src/ffts_real.c
|
||||
src/ffts_real_nd.c
|
||||
src/ffts_real_nd.h
|
||||
src/ffts_transpose.c
|
||||
src/ffts_transpose.h
|
||||
src/ffts_trig.c
|
||||
src/ffts_trig.h
|
||||
src/ffts_static.c
|
||||
src/ffts_static.h
|
||||
src/macros.h
|
||||
src/patterns.h
|
||||
src/types.h
|
||||
)
|
||||
|
||||
if(NOT DISABLE_DYNAMIC_CODE)
|
||||
if(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|x86_64.*|AMD64.*")
|
||||
list(APPEND FFTS_SOURCES
|
||||
src/codegen_sse.h
|
||||
)
|
||||
else()
|
||||
message(WARNING "Dynamic code is only supported with x64, disabling dynamic code.")
|
||||
set(DISABLE_DYNAMIC_CODE ON)
|
||||
endif(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|x86_64.*|AMD64.*")
|
||||
endif(NOT DISABLE_DYNAMIC_CODE)
|
||||
|
||||
if(ENABLE_NEON)
|
||||
list(APPEND FFTS_SOURCES
|
||||
src/neon.s
|
||||
)
|
||||
|
||||
if(DISABLE_DYNAMIC_CODE)
|
||||
list(APPEND FFTS_SOURCES
|
||||
src/neon_static.s
|
||||
)
|
||||
endif(DISABLE_DYNAMIC_CODE)
|
||||
|
||||
add_definitions(-DHAVE_NEON)
|
||||
elseif(ENABLE_VFP)
|
||||
if(NOT DISABLE_DYNAMIC_CODE)
|
||||
list(APPEND FFTS_SOURCES
|
||||
src/vfp.s
|
||||
)
|
||||
endif(NOT DISABLE_DYNAMIC_CODE)
|
||||
|
||||
add_definitions(-DHAVE_VFP)
|
||||
elseif(HAVE_XMMINTRIN_H)
|
||||
add_definitions(-DHAVE_SSE)
|
||||
|
||||
list(APPEND FFTS_SOURCES
|
||||
src/macros-avx.h
|
||||
src/macros-sse.h
|
||||
)
|
||||
endif(ENABLE_NEON)
|
||||
|
||||
if(DISABLE_DYNAMIC_CODE)
|
||||
add_definitions(-DDYNAMIC_DISABLED)
|
||||
else()
|
||||
list(APPEND FFTS_SOURCES
|
||||
src/codegen.c
|
||||
src/codegen.h
|
||||
)
|
||||
endif(DISABLE_DYNAMIC_CODE)
|
||||
|
||||
if(GENERATE_POSITION_INDEPENDENT_CODE)
|
||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||
endif(GENERATE_POSITION_INDEPENDENT_CODE)
|
||||
|
||||
if(ENABLE_SHARED)
|
||||
add_library(ffts_shared SHARED
|
||||
${FFTS_HEADERS}
|
||||
${FFTS_SOURCES}
|
||||
)
|
||||
|
||||
# On unix-like platforms the library is called "libffts.so" and on Windows "ffts.dll"
|
||||
set_target_properties(ffts_shared PROPERTIES
|
||||
DEFINE_SYMBOL FFTS_SHARED
|
||||
OUTPUT_NAME ffts
|
||||
VERSION ${FFTS_MAJOR}.${FFTS_MINOR}.${FFTS_MICRO}
|
||||
)
|
||||
|
||||
install( TARGETS ffts_shared DESTINATION ${LIB_INSTALL_DIR} )
|
||||
endif(ENABLE_SHARED)
|
||||
|
||||
if(ENABLE_STATIC)
|
||||
add_library(ffts_static STATIC
|
||||
${FFTS_HEADERS}
|
||||
${FFTS_SOURCES}
|
||||
)
|
||||
|
||||
if(UNIX)
|
||||
# On unix-like platforms the library is called "libffts.a"
|
||||
set_target_properties(ffts_static PROPERTIES OUTPUT_NAME ffts)
|
||||
endif(UNIX)
|
||||
|
||||
install( TARGETS ffts_static DESTINATION ${LIB_INSTALL_DIR} )
|
||||
endif(ENABLE_STATIC)
|
||||
|
||||
if(ENABLE_STATIC OR ENABLE_SHARED)
|
||||
find_path(MPFR_INCLUDES
|
||||
NAMES mpfr.h
|
||||
PATHS ${INCLUDE_INSTALL_DIR}
|
||||
)
|
||||
find_library(MPFR_LIBRARIES mpfr PATHS ${LIB_INSTALL_DIR})
|
||||
find_package(OpenMP)
|
||||
|
||||
if(MPFR_INCLUDES)
|
||||
add_definitions(-DHAVE_MPFR_H)
|
||||
include_directories(${MPFR_INCLUDES})
|
||||
endif(MPFR_INCLUDES)
|
||||
|
||||
add_executable(ffts_trig_test
|
||||
tests/trig_test.c
|
||||
)
|
||||
|
||||
target_link_libraries(ffts_trig_test ffts)
|
||||
if(MPFR_LIBRARIES)
|
||||
target_link_libraries(ffts_trig_test ${MPFR_LIBRARIES})
|
||||
endif(MPFR_LIBRARIES)
|
||||
|
||||
if(OPENMP_FOUND)
|
||||
if(MSVC)
|
||||
set_target_properties(ffts_trig_test PROPERTIES
|
||||
COMPILE_FLAGS "${OpenMP_C_FLAGS}"
|
||||
LINK_FLAGS "${OpenMP_EXE_LINKER_FLAGS}"
|
||||
)
|
||||
else()
|
||||
set_target_properties(ffts_trig_test PROPERTIES
|
||||
COMPILE_FLAGS "${OpenMP_C_FLAGS}"
|
||||
LINK_FLAGS "${OpenMP_C_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}"
|
||||
)
|
||||
endif(MSVC)
|
||||
endif(OPENMP_FOUND)
|
||||
|
||||
add_executable(ffts_test
|
||||
tests/test.c
|
||||
)
|
||||
|
||||
# link with static library by default
|
||||
if(ENABLE_STATIC)
|
||||
add_library(ffts ALIAS ffts_static)
|
||||
else()
|
||||
add_library(ffts ALIAS ffts_shared)
|
||||
endif(ENABLE_STATIC)
|
||||
|
||||
target_link_libraries(ffts_test
|
||||
ffts
|
||||
${FFTS_EXTRA_LIBRARIES}
|
||||
)
|
||||
|
||||
add_executable(ffts_cpu_test
|
||||
src/ffts_cpu.c
|
||||
src/ffts_cpu.h
|
||||
tests/cpu_test.c
|
||||
)
|
||||
|
||||
set_target_properties(ffts_cpu_test PROPERTIES COMPILE_DEFINITIONS FFTS_BUILDING_CPU_TEST)
|
||||
endif(ENABLE_STATIC OR ENABLE_SHARED)
|
||||
|
||||
# generate packageconfig file
|
||||
if(UNIX)
|
||||
include(FindPkgConfig QUIET)
|
||||
if(PKG_CONFIG_FOUND)
|
||||
# convert lists of link libraries into -lstdc++ -lm etc..
|
||||
foreach(LIB ${CMAKE_CXX_IMPLICIT_LINK_LIBRARIES} ${PLATFORM_LIBS})
|
||||
set(PRIVATE_LIBS "${PRIVATE_LIBS} -l${LIB}")
|
||||
endforeach()
|
||||
# Produce a pkg-config file for linking against the shared lib
|
||||
configure_file("ffts.pc.cmake.in" "ffts.pc" @ONLY)
|
||||
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/ffts.pc"
|
||||
DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig")
|
||||
endif(PKG_CONFIG_FOUND)
|
||||
endif(UNIX)
|
||||
|
||||
install( FILES
|
||||
${FFTS_HEADERS}
|
||||
DESTINATION ${INCLUDE_INSTALL_DIR} )
|
||||
@@ -1,31 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is part of FFTS -- The Fastest Fourier Transform in the South
|
||||
|
||||
Copyright (c) 2012, 2013 Anthony M. Blake <amb@anthonix.com>
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
* Neither the name of the organization nor the
|
||||
names of its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL ANTHONY M. BLAKE BE LIABLE FOR ANY
|
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*/
|
||||
@@ -1,11 +0,0 @@
|
||||
AUTOMAKE_OPTIONS = foreign
|
||||
SUBDIRS = src tests
|
||||
EXTRA_DIST=COPYRIGHT ffts.pc.in build_iphone.sh build_android.sh
|
||||
ACLOCAL_AMFLAGS = -Im4
|
||||
|
||||
pkgconfigdir = $(libdir)/pkgconfig
|
||||
pkgconfig_DATA = ffts.pc
|
||||
|
||||
if ENABLE_JNI
|
||||
SUBDIRS += java
|
||||
endif
|
||||
@@ -1,879 +0,0 @@
|
||||
# Makefile.in generated by automake 1.14 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
|
||||
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
|
||||
VPATH = @srcdir@
|
||||
am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
|
||||
am__make_running_with_option = \
|
||||
case $${target_option-} in \
|
||||
?) ;; \
|
||||
*) echo "am__make_running_with_option: internal error: invalid" \
|
||||
"target option '$${target_option-}' specified" >&2; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
has_opt=no; \
|
||||
sane_makeflags=$$MAKEFLAGS; \
|
||||
if $(am__is_gnu_make); then \
|
||||
sane_makeflags=$$MFLAGS; \
|
||||
else \
|
||||
case $$MAKEFLAGS in \
|
||||
*\\[\ \ ]*) \
|
||||
bs=\\; \
|
||||
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
|
||||
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
|
||||
esac; \
|
||||
fi; \
|
||||
skip_next=no; \
|
||||
strip_trailopt () \
|
||||
{ \
|
||||
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
|
||||
}; \
|
||||
for flg in $$sane_makeflags; do \
|
||||
test $$skip_next = yes && { skip_next=no; continue; }; \
|
||||
case $$flg in \
|
||||
*=*|--*) continue;; \
|
||||
-*I) strip_trailopt 'I'; skip_next=yes;; \
|
||||
-*I?*) strip_trailopt 'I';; \
|
||||
-*O) strip_trailopt 'O'; skip_next=yes;; \
|
||||
-*O?*) strip_trailopt 'O';; \
|
||||
-*l) strip_trailopt 'l'; skip_next=yes;; \
|
||||
-*l?*) strip_trailopt 'l';; \
|
||||
-[dEDm]) skip_next=yes;; \
|
||||
-[JT]) skip_next=yes;; \
|
||||
esac; \
|
||||
case $$flg in \
|
||||
*$$target_option*) has_opt=yes; break;; \
|
||||
esac; \
|
||||
done; \
|
||||
test $$has_opt = yes
|
||||
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
|
||||
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkglibexecdir = $(libexecdir)/@PACKAGE@
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
@ENABLE_JNI_TRUE@am__append_1 = java
|
||||
subdir = .
|
||||
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
|
||||
$(top_srcdir)/configure $(am__configure_deps) \
|
||||
$(srcdir)/config.h.in $(srcdir)/ffts.pc.in AUTHORS README \
|
||||
compile config.guess config.sub depcomp install-sh missing \
|
||||
ltmain.sh
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_classpath.m4 \
|
||||
$(top_srcdir)/m4/ax_check_java_home.m4 \
|
||||
$(top_srcdir)/m4/ax_java_options.m4 \
|
||||
$(top_srcdir)/m4/ax_jni_include_dir.m4 \
|
||||
$(top_srcdir)/m4/ax_prog_jar.m4 \
|
||||
$(top_srcdir)/m4/ax_prog_javac.m4 \
|
||||
$(top_srcdir)/m4/ax_prog_javac_works.m4 \
|
||||
$(top_srcdir)/configure.ac
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
|
||||
configure.lineno config.status.lineno
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = config.h
|
||||
CONFIG_CLEAN_FILES = ffts.pc
|
||||
CONFIG_CLEAN_VPATH_FILES =
|
||||
AM_V_P = $(am__v_P_@AM_V@)
|
||||
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
|
||||
am__v_P_0 = false
|
||||
am__v_P_1 = :
|
||||
AM_V_GEN = $(am__v_GEN_@AM_V@)
|
||||
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
|
||||
am__v_GEN_0 = @echo " GEN " $@;
|
||||
am__v_GEN_1 =
|
||||
AM_V_at = $(am__v_at_@AM_V@)
|
||||
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
|
||||
am__v_at_0 = @
|
||||
am__v_at_1 =
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
|
||||
ctags-recursive dvi-recursive html-recursive info-recursive \
|
||||
install-data-recursive install-dvi-recursive \
|
||||
install-exec-recursive install-html-recursive \
|
||||
install-info-recursive install-pdf-recursive \
|
||||
install-ps-recursive install-recursive installcheck-recursive \
|
||||
installdirs-recursive pdf-recursive ps-recursive \
|
||||
tags-recursive uninstall-recursive
|
||||
am__can_run_installinfo = \
|
||||
case $$AM_UPDATE_INFO_DIR in \
|
||||
n|no|NO) false;; \
|
||||
*) (install-info --version) >/dev/null 2>&1;; \
|
||||
esac
|
||||
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
|
||||
am__vpath_adj = case $$p in \
|
||||
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
*) f=$$p;; \
|
||||
esac;
|
||||
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
|
||||
am__install_max = 40
|
||||
am__nobase_strip_setup = \
|
||||
srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
|
||||
am__nobase_strip = \
|
||||
for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
|
||||
am__nobase_list = $(am__nobase_strip_setup); \
|
||||
for p in $$list; do echo "$$p $$p"; done | \
|
||||
sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
|
||||
$(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
|
||||
if (++n[$$2] == $(am__install_max)) \
|
||||
{ print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
|
||||
END { for (dir in files) print dir, files[dir] }'
|
||||
am__base_list = \
|
||||
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
|
||||
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
|
||||
am__uninstall_files_from_dir = { \
|
||||
test -z "$$files" \
|
||||
|| { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
|
||||
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
|
||||
$(am__cd) "$$dir" && rm -f $$files; }; \
|
||||
}
|
||||
am__installdirs = "$(DESTDIR)$(pkgconfigdir)"
|
||||
DATA = $(pkgconfig_DATA)
|
||||
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
|
||||
distclean-recursive maintainer-clean-recursive
|
||||
am__recursive_targets = \
|
||||
$(RECURSIVE_TARGETS) \
|
||||
$(RECURSIVE_CLEAN_TARGETS) \
|
||||
$(am__extra_recursive_targets)
|
||||
AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
|
||||
cscope distdir dist dist-all distcheck
|
||||
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \
|
||||
$(LISP)config.h.in
|
||||
# Read a list of newline-separated strings from the standard input,
|
||||
# and print each of them once, without duplicates. Input order is
|
||||
# *not* preserved.
|
||||
am__uniquify_input = $(AWK) '\
|
||||
BEGIN { nonempty = 0; } \
|
||||
{ items[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in items) print i; }; } \
|
||||
'
|
||||
# Make sure the list of sources is unique. This is necessary because,
|
||||
# e.g., the same source file might be shared among _SOURCES variables
|
||||
# for different programs/libraries.
|
||||
am__define_uniq_tagged_files = \
|
||||
list='$(am__tagged_files)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | $(am__uniquify_input)`
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
CSCOPE = cscope
|
||||
DIST_SUBDIRS = src tests java
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
distdir = $(PACKAGE)-$(VERSION)
|
||||
top_distdir = $(distdir)
|
||||
am__remove_distdir = \
|
||||
if test -d "$(distdir)"; then \
|
||||
find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
|
||||
&& rm -rf "$(distdir)" \
|
||||
|| { sleep 5 && rm -rf "$(distdir)"; }; \
|
||||
else :; fi
|
||||
am__post_remove_distdir = $(am__remove_distdir)
|
||||
am__relativize = \
|
||||
dir0=`pwd`; \
|
||||
sed_first='s,^\([^/]*\)/.*$$,\1,'; \
|
||||
sed_rest='s,^[^/]*/*,,'; \
|
||||
sed_last='s,^.*/\([^/]*\)$$,\1,'; \
|
||||
sed_butlast='s,/*[^/]*$$,,'; \
|
||||
while test -n "$$dir1"; do \
|
||||
first=`echo "$$dir1" | sed -e "$$sed_first"`; \
|
||||
if test "$$first" != "."; then \
|
||||
if test "$$first" = ".."; then \
|
||||
dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
|
||||
dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
|
||||
else \
|
||||
first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
|
||||
if test "$$first2" = "$$first"; then \
|
||||
dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
|
||||
else \
|
||||
dir2="../$$dir2"; \
|
||||
fi; \
|
||||
dir0="$$dir0"/"$$first"; \
|
||||
fi; \
|
||||
fi; \
|
||||
dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
|
||||
done; \
|
||||
reldir="$$dir2"
|
||||
DIST_ARCHIVES = $(distdir).tar.gz
|
||||
GZIP_ENV = --best
|
||||
DIST_TARGETS = dist-gzip
|
||||
distuninstallcheck_listfiles = find . -type f -print
|
||||
am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
|
||||
| sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
|
||||
distcleancheck_listfiles = find . -type f -print
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMTAR = @AMTAR@
|
||||
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
|
||||
AR = @AR@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCAS = @CCAS@
|
||||
CCASDEPMODE = @CCASDEPMODE@
|
||||
CCASFLAGS = @CCASFLAGS@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
CXXDEPMODE = @CXXDEPMODE@
|
||||
CXXFLAGS = @CXXFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
DLLTOOL = @DLLTOOL@
|
||||
DSYMUTIL = @DSYMUTIL@
|
||||
DUMPBIN = @DUMPBIN@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
FGREP = @FGREP@
|
||||
GREP = @GREP@
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
JAR = @JAR@
|
||||
JAVA = @JAVA@
|
||||
JAVAC = @JAVAC@
|
||||
JAVACFLAGS = @JAVACFLAGS@
|
||||
JAVAFLAGS = @JAVAFLAGS@
|
||||
JAVAPREFIX = @JAVAPREFIX@
|
||||
JAVA_PATH_NAME = @JAVA_PATH_NAME@
|
||||
JNI_CPPFLAGS = @JNI_CPPFLAGS@
|
||||
LD = @LD@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LIPO = @LIPO@
|
||||
LN_S = @LN_S@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
MANIFEST_TOOL = @MANIFEST_TOOL@
|
||||
MKDIR_P = @MKDIR_P@
|
||||
NM = @NM@
|
||||
NMEDIT = @NMEDIT@
|
||||
OBJDUMP = @OBJDUMP@
|
||||
OBJEXT = @OBJEXT@
|
||||
OTOOL = @OTOOL@
|
||||
OTOOL64 = @OTOOL64@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_URL = @PACKAGE_URL@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
RANLIB = @RANLIB@
|
||||
SED = @SED@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
VERSION = @VERSION@
|
||||
_ACJNI_JAVAC = @_ACJNI_JAVAC@
|
||||
abs_builddir = @abs_builddir@
|
||||
abs_srcdir = @abs_srcdir@
|
||||
abs_top_builddir = @abs_top_builddir@
|
||||
abs_top_srcdir = @abs_top_srcdir@
|
||||
ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
builddir = @builddir@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
srcdir = @srcdir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target_alias = @target_alias@
|
||||
top_build_prefix = @top_build_prefix@
|
||||
top_builddir = @top_builddir@
|
||||
top_srcdir = @top_srcdir@
|
||||
AUTOMAKE_OPTIONS = foreign
|
||||
SUBDIRS = src tests $(am__append_1)
|
||||
EXTRA_DIST = COPYRIGHT ffts.pc.in build_iphone.sh build_android.sh
|
||||
ACLOCAL_AMFLAGS = -Im4
|
||||
pkgconfigdir = $(libdir)/pkgconfig
|
||||
pkgconfig_DATA = ffts.pc
|
||||
all: config.h
|
||||
$(MAKE) $(AM_MAKEFLAGS) all-recursive
|
||||
|
||||
.SUFFIXES:
|
||||
am--refresh: Makefile
|
||||
@:
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
|
||||
$(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
|
||||
$(am__cd) $(top_srcdir) && \
|
||||
$(AUTOMAKE) --foreign Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
echo ' $(SHELL) ./config.status'; \
|
||||
$(SHELL) ./config.status;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
$(SHELL) ./config.status --recheck
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
$(am__cd) $(srcdir) && $(AUTOCONF)
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
|
||||
$(am__aclocal_m4_deps):
|
||||
|
||||
config.h: stamp-h1
|
||||
@test -f $@ || rm -f stamp-h1
|
||||
@test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1
|
||||
|
||||
stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
|
||||
@rm -f stamp-h1
|
||||
cd $(top_builddir) && $(SHELL) ./config.status config.h
|
||||
$(srcdir)/config.h.in: $(am__configure_deps)
|
||||
($(am__cd) $(top_srcdir) && $(AUTOHEADER))
|
||||
rm -f stamp-h1
|
||||
touch $@
|
||||
|
||||
distclean-hdr:
|
||||
-rm -f config.h stamp-h1
|
||||
ffts.pc: $(top_builddir)/config.status $(srcdir)/ffts.pc.in
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $@
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
distclean-libtool:
|
||||
-rm -f libtool config.lt
|
||||
install-pkgconfigDATA: $(pkgconfig_DATA)
|
||||
@$(NORMAL_INSTALL)
|
||||
@list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
|
||||
if test -n "$$list"; then \
|
||||
echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \
|
||||
$(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \
|
||||
fi; \
|
||||
for p in $$list; do \
|
||||
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||
echo "$$d$$p"; \
|
||||
done | $(am__base_list) | \
|
||||
while read files; do \
|
||||
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \
|
||||
$(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \
|
||||
done
|
||||
|
||||
uninstall-pkgconfigDATA:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
|
||||
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
|
||||
dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir)
|
||||
|
||||
# This directory's subdirectories are mostly independent; you can cd
|
||||
# into them and run 'make' without going through this Makefile.
|
||||
# To change the values of 'make' variables: instead of editing Makefiles,
|
||||
# (1) if the variable is set in 'config.status', edit 'config.status'
|
||||
# (which will cause the Makefiles to be regenerated when you run 'make');
|
||||
# (2) otherwise, pass the desired values on the 'make' command line.
|
||||
$(am__recursive_targets):
|
||||
@fail=; \
|
||||
if $(am__make_keepgoing); then \
|
||||
failcom='fail=yes'; \
|
||||
else \
|
||||
failcom='exit 1'; \
|
||||
fi; \
|
||||
dot_seen=no; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
case "$@" in \
|
||||
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
|
||||
*) list='$(SUBDIRS)' ;; \
|
||||
esac; \
|
||||
for subdir in $$list; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
dot_seen=yes; \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| eval $$failcom; \
|
||||
done; \
|
||||
if test "$$dot_seen" = "no"; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
|
||||
fi; test -z "$$fail"
|
||||
|
||||
ID: $(am__tagged_files)
|
||||
$(am__define_uniq_tagged_files); mkid -fID $$unique
|
||||
tags: tags-recursive
|
||||
TAGS: tags
|
||||
|
||||
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
|
||||
set x; \
|
||||
here=`pwd`; \
|
||||
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
|
||||
include_option=--etags-include; \
|
||||
empty_fix=.; \
|
||||
else \
|
||||
include_option=--include; \
|
||||
empty_fix=; \
|
||||
fi; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test ! -f $$subdir/TAGS || \
|
||||
set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
|
||||
fi; \
|
||||
done; \
|
||||
$(am__define_uniq_tagged_files); \
|
||||
shift; \
|
||||
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
if test $$# -gt 0; then \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
"$$@" $$unique; \
|
||||
else \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$unique; \
|
||||
fi; \
|
||||
fi
|
||||
ctags: ctags-recursive
|
||||
|
||||
CTAGS: ctags
|
||||
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
|
||||
$(am__define_uniq_tagged_files); \
|
||||
test -z "$(CTAGS_ARGS)$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& $(am__cd) $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) "$$here"
|
||||
cscope: cscope.files
|
||||
test ! -s cscope.files \
|
||||
|| $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
|
||||
clean-cscope:
|
||||
-rm -f cscope.files
|
||||
cscope.files: clean-cscope cscopelist
|
||||
cscopelist: cscopelist-recursive
|
||||
|
||||
cscopelist-am: $(am__tagged_files)
|
||||
list='$(am__tagged_files)'; \
|
||||
case "$(srcdir)" in \
|
||||
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
|
||||
*) sdir=$(subdir)/$(srcdir) ;; \
|
||||
esac; \
|
||||
for i in $$list; do \
|
||||
if test -f "$$i"; then \
|
||||
echo "$(subdir)/$$i"; \
|
||||
else \
|
||||
echo "$$sdir/$$i"; \
|
||||
fi; \
|
||||
done >> $(top_builddir)/cscope.files
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
-rm -f cscope.out cscope.in.out cscope.po.out cscope.files
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
$(am__remove_distdir)
|
||||
test -d "$(distdir)" || mkdir "$(distdir)"
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
list='$(DISTFILES)'; \
|
||||
dist_files=`for file in $$list; do echo $$file; done | \
|
||||
sed -e "s|^$$srcdirstrip/||;t" \
|
||||
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
|
||||
case $$dist_files in \
|
||||
*/*) $(MKDIR_P) `echo "$$dist_files" | \
|
||||
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
|
||||
sort -u` ;; \
|
||||
esac; \
|
||||
for file in $$dist_files; do \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test -d "$(distdir)/$$file"; then \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
|
||||
else \
|
||||
test -f "$(distdir)/$$file" \
|
||||
|| cp -p $$d/$$file "$(distdir)/$$file" \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
$(am__make_dryrun) \
|
||||
|| test -d "$(distdir)/$$subdir" \
|
||||
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|
||||
|| exit 1; \
|
||||
dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
|
||||
$(am__relativize); \
|
||||
new_distdir=$$reldir; \
|
||||
dir1=$$subdir; dir2="$(top_distdir)"; \
|
||||
$(am__relativize); \
|
||||
new_top_distdir=$$reldir; \
|
||||
echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
|
||||
echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
|
||||
($(am__cd) $$subdir && \
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="$$new_top_distdir" \
|
||||
distdir="$$new_distdir" \
|
||||
am__remove_distdir=: \
|
||||
am__skip_length_check=: \
|
||||
am__skip_mode_fix=: \
|
||||
distdir) \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
-test -n "$(am__skip_mode_fix)" \
|
||||
|| find "$(distdir)" -type d ! -perm -755 \
|
||||
-exec chmod u+rwx,go+rx {} \; -o \
|
||||
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
|
||||
|| chmod -R a+r "$(distdir)"
|
||||
dist-gzip: distdir
|
||||
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||
$(am__post_remove_distdir)
|
||||
|
||||
dist-bzip2: distdir
|
||||
tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
|
||||
$(am__post_remove_distdir)
|
||||
|
||||
dist-lzip: distdir
|
||||
tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
|
||||
$(am__post_remove_distdir)
|
||||
|
||||
dist-xz: distdir
|
||||
tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
|
||||
$(am__post_remove_distdir)
|
||||
|
||||
dist-tarZ: distdir
|
||||
@echo WARNING: "Support for shar distribution archives is" \
|
||||
"deprecated." >&2
|
||||
@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
|
||||
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
|
||||
$(am__post_remove_distdir)
|
||||
|
||||
dist-shar: distdir
|
||||
@echo WARNING: "Support for distribution archives compressed with" \
|
||||
"legacy program 'compress' is deprecated." >&2
|
||||
@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
|
||||
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
|
||||
$(am__post_remove_distdir)
|
||||
|
||||
dist-zip: distdir
|
||||
-rm -f $(distdir).zip
|
||||
zip -rq $(distdir).zip $(distdir)
|
||||
$(am__post_remove_distdir)
|
||||
|
||||
dist dist-all:
|
||||
$(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
|
||||
$(am__post_remove_distdir)
|
||||
|
||||
# This target untars the dist file and tries a VPATH configuration. Then
|
||||
# it guarantees that the distribution is self-contained by making another
|
||||
# tarfile.
|
||||
distcheck: dist
|
||||
case '$(DIST_ARCHIVES)' in \
|
||||
*.tar.gz*) \
|
||||
GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
|
||||
*.tar.bz2*) \
|
||||
bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
|
||||
*.tar.lz*) \
|
||||
lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
|
||||
*.tar.xz*) \
|
||||
xz -dc $(distdir).tar.xz | $(am__untar) ;;\
|
||||
*.tar.Z*) \
|
||||
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
|
||||
*.shar.gz*) \
|
||||
GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
|
||||
*.zip*) \
|
||||
unzip $(distdir).zip ;;\
|
||||
esac
|
||||
chmod -R a-w $(distdir)
|
||||
chmod u+w $(distdir)
|
||||
mkdir $(distdir)/_build $(distdir)/_inst
|
||||
chmod a-w $(distdir)
|
||||
test -d $(distdir)/_build || exit 0; \
|
||||
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
|
||||
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
|
||||
&& am__cwd=`pwd` \
|
||||
&& $(am__cd) $(distdir)/_build \
|
||||
&& ../configure --srcdir=.. --prefix="$$dc_install_base" \
|
||||
$(AM_DISTCHECK_CONFIGURE_FLAGS) \
|
||||
$(DISTCHECK_CONFIGURE_FLAGS) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) check \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) install \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
|
||||
distuninstallcheck \
|
||||
&& chmod -R a-w "$$dc_install_base" \
|
||||
&& ({ \
|
||||
(cd ../.. && umask 077 && mkdir "$$dc_destdir") \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
|
||||
distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
|
||||
} || { rm -rf "$$dc_destdir"; exit 1; }) \
|
||||
&& rm -rf "$$dc_destdir" \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dist \
|
||||
&& rm -rf $(DIST_ARCHIVES) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
|
||||
&& cd "$$am__cwd" \
|
||||
|| exit 1
|
||||
$(am__post_remove_distdir)
|
||||
@(echo "$(distdir) archives ready for distribution: "; \
|
||||
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
|
||||
sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
|
||||
distuninstallcheck:
|
||||
@test -n '$(distuninstallcheck_dir)' || { \
|
||||
echo 'ERROR: trying to run $@ with an empty' \
|
||||
'$$(distuninstallcheck_dir)' >&2; \
|
||||
exit 1; \
|
||||
}; \
|
||||
$(am__cd) '$(distuninstallcheck_dir)' || { \
|
||||
echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
|
||||
exit 1; \
|
||||
}; \
|
||||
test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
|
||||
|| { echo "ERROR: files left after uninstall:" ; \
|
||||
if test -n "$(DESTDIR)"; then \
|
||||
echo " (check DESTDIR support)"; \
|
||||
fi ; \
|
||||
$(distuninstallcheck_listfiles) ; \
|
||||
exit 1; } >&2
|
||||
distcleancheck: distclean
|
||||
@if test '$(srcdir)' = . ; then \
|
||||
echo "ERROR: distcleancheck can only run from a VPATH build" ; \
|
||||
exit 1 ; \
|
||||
fi
|
||||
@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
|
||||
|| { echo "ERROR: files left in build directory after distclean:" ; \
|
||||
$(distcleancheck_listfiles) ; \
|
||||
exit 1; } >&2
|
||||
check-am: all-am
|
||||
check: check-recursive
|
||||
all-am: Makefile $(DATA) config.h
|
||||
installdirs: installdirs-recursive
|
||||
installdirs-am:
|
||||
for dir in "$(DESTDIR)$(pkgconfigdir)"; do \
|
||||
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
|
||||
done
|
||||
install: install-recursive
|
||||
install-exec: install-exec-recursive
|
||||
install-data: install-data-recursive
|
||||
uninstall: uninstall-recursive
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-recursive
|
||||
install-strip:
|
||||
if test -z '$(STRIP)'; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
install; \
|
||||
else \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
|
||||
fi
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-recursive
|
||||
|
||||
clean-am: clean-generic clean-libtool mostlyclean-am
|
||||
|
||||
distclean: distclean-recursive
|
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-generic distclean-hdr \
|
||||
distclean-libtool distclean-tags
|
||||
|
||||
dvi: dvi-recursive
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-recursive
|
||||
|
||||
html-am:
|
||||
|
||||
info: info-recursive
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am: install-pkgconfigDATA
|
||||
|
||||
install-dvi: install-dvi-recursive
|
||||
|
||||
install-dvi-am:
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-html: install-html-recursive
|
||||
|
||||
install-html-am:
|
||||
|
||||
install-info: install-info-recursive
|
||||
|
||||
install-info-am:
|
||||
|
||||
install-man:
|
||||
|
||||
install-pdf: install-pdf-recursive
|
||||
|
||||
install-pdf-am:
|
||||
|
||||
install-ps: install-ps-recursive
|
||||
|
||||
install-ps-am:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-recursive
|
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||
-rm -rf $(top_srcdir)/autom4te.cache
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-recursive
|
||||
|
||||
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
||||
|
||||
pdf: pdf-recursive
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-recursive
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-pkgconfigDATA
|
||||
|
||||
.MAKE: $(am__recursive_targets) all install-am install-strip
|
||||
|
||||
.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
|
||||
am--refresh check check-am clean clean-cscope clean-generic \
|
||||
clean-libtool cscope cscopelist-am ctags ctags-am dist \
|
||||
dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \
|
||||
dist-xz dist-zip distcheck distclean distclean-generic \
|
||||
distclean-hdr distclean-libtool distclean-tags distcleancheck \
|
||||
distdir distuninstallcheck dvi dvi-am html html-am info \
|
||||
info-am install install-am install-data install-data-am \
|
||||
install-dvi install-dvi-am install-exec install-exec-am \
|
||||
install-html install-html-am install-info install-info-am \
|
||||
install-man install-pdf install-pdf-am install-pkgconfigDATA \
|
||||
install-ps install-ps-am install-strip installcheck \
|
||||
installcheck-am installdirs installdirs-am maintainer-clean \
|
||||
maintainer-clean-generic mostlyclean mostlyclean-generic \
|
||||
mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
|
||||
uninstall-am uninstall-pkgconfigDATA
|
||||
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
@@ -1,35 +0,0 @@
|
||||
# FFTS -- The Fastest Fourier Transform in the South
|
||||
|
||||
[](https://travis-ci.org/linkotec/ffts)
|
||||
|
||||
To build for Android, edit and run build_android.sh
|
||||
|
||||
To build for iOS, edit and run build_iphone.sh
|
||||
|
||||
To build for Linux or OS X on x86, run
|
||||
./configure --enable-sse --enable-single --prefix=/usr/local
|
||||
make
|
||||
make install
|
||||
|
||||
Optionally build for Windows and Linux with CMake, run
|
||||
mkdir build
|
||||
cd build
|
||||
cmake ..
|
||||
|
||||
FFTS dynamically generates code at runtime. This can be disabled with
|
||||
--disable-dynamic-code
|
||||
|
||||
Note that 32 bit x86 dynamic machine code generation is not supported at the moment.
|
||||
|
||||
For JNI targets: --enable-jni will build the jni stuff automatically for
|
||||
the host target, and --enable-shared must also be added manually for it to
|
||||
work.
|
||||
|
||||
If you like FFTS, please show your support by sending a postcard to:
|
||||
|
||||
Anthony Blake<br>
|
||||
Department of Computer Science<br>
|
||||
The University of Waikato<br>
|
||||
Private Bag 3105<br>
|
||||
Hamilton 3240<br>
|
||||
NEW ZEALAND
|
||||
9763
FFTS/Sources/FFTS/aclocal.m4
vendored
9763
FFTS/Sources/FFTS/aclocal.m4
vendored
File diff suppressed because it is too large
Load Diff
@@ -1,80 +0,0 @@
|
||||
#!/bin/sh
|
||||
# Compiles ffts for Android
|
||||
# Make sure you have NDK_ROOT defined in .bashrc or .bash_profile
|
||||
# Modify INSTALL_DIR to suit your situation
|
||||
|
||||
INSTALL_DIR="`pwd`/java/android/bin"
|
||||
|
||||
PLATFORM=android-8
|
||||
TOOL="4.6"
|
||||
|
||||
case $(uname -s) in
|
||||
Darwin)
|
||||
CONFBUILD=i386-apple-darwin`uname -r`
|
||||
HOSTPLAT=darwin-x86
|
||||
;;
|
||||
Linux)
|
||||
CONFBUILD=x86-unknown-linux
|
||||
HOSTPLAT=linux-`uname -m`
|
||||
;;
|
||||
*) echo $0: Unknown platform; exit
|
||||
esac
|
||||
|
||||
case arm in
|
||||
arm)
|
||||
TARGPLAT=arm-linux-androideabi
|
||||
ARCH=arm
|
||||
CONFTARG=arm-eabi
|
||||
;;
|
||||
x86)
|
||||
TARGPLAT=x86
|
||||
ARCH=x86
|
||||
CONFTARG=x86
|
||||
;;
|
||||
mips)
|
||||
## probably wrong
|
||||
TARGPLAT=mipsel-linux-android
|
||||
ARCH=mips
|
||||
CONFTARG=mips
|
||||
;;
|
||||
*) echo $0: Unknown target; exit
|
||||
esac
|
||||
|
||||
: ${NDK_ROOT:?}
|
||||
|
||||
echo "Using: $NDK_ROOT/toolchains/${TARGPLAT}-${TOOL}/prebuilt/${HOSTPLAT}/bin"
|
||||
|
||||
export PATH="$NDK_ROOT/toolchains/${TARGPLAT}-${TOOL}/prebuilt/${HOSTPLAT}/bin/:$PATH"
|
||||
export SYS_ROOT="$NDK_ROOT/platforms/${PLATFORM}/arch-${ARCH}/"
|
||||
export CC="${TARGPLAT}-gcc --sysroot=$SYS_ROOT"
|
||||
export LD="${TARGPLAT}-ld"
|
||||
export AR="${TARGPLAT}-ar"
|
||||
export RANLIB="${TARGPLAT}-ranlib"
|
||||
export STRIP="${TARGPLAT}-strip"
|
||||
export CFLAGS="-Os"
|
||||
|
||||
mkdir -p $INSTALL_DIR
|
||||
./configure --enable-neon --build=${CONFBUILD} --host=${CONFTARG} --prefix=$INSTALL_DIR LIBS="-lc -lgcc"
|
||||
|
||||
make clean
|
||||
make
|
||||
make install
|
||||
|
||||
if [ -z "$ANDROID_HOME" ] ; then
|
||||
echo ""
|
||||
echo " No ANDROID_HOME defined"
|
||||
echo " Android JNI interfaces will not be built"
|
||||
echo
|
||||
else
|
||||
echo
|
||||
echo "Using android_home ${ANDROID_HOME}"
|
||||
echo
|
||||
( cd java/android ; ${ANDROID_HOME}/tools/android update lib-project -p . ) || exit 1
|
||||
( cd java/android/jni ; ${NDK_ROOT}/ndk-build V=1 ) || exit 1
|
||||
( cd java/android ; ant release ) || exit 1
|
||||
echo
|
||||
echo "Android library project location:"
|
||||
echo " `pwd`/java/android"
|
||||
echo
|
||||
fi
|
||||
exit 0
|
||||
@@ -1,22 +0,0 @@
|
||||
#/bin/sh
|
||||
# Compiles ffts for iOS
|
||||
# Modify INSTALL_DIR, SDKVER and DEVROOT to suit your situation
|
||||
|
||||
INSTALL_DIR="`pwd`/build"
|
||||
|
||||
export SDKVER="6.1"
|
||||
export DEVROOT="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer"
|
||||
export SDKROOT="$DEVROOT/SDKs/iPhoneOS$SDKVER.sdk"
|
||||
export CFLAGS="-O3 -Wreturn-type -Wparentheses -Wswitch -Wno-unused-parameter -Wno-unused-variable -Wunused-value -Wno-shorten-64-to-32 -Wno-trigraphs -fpascal-strings -miphoneos-version-min=5.0 -mcpu=cortex-a9 -arch armv7 -mfpu=neon -pipe -isysroot $SDKROOT -isystem $SDKROOT/usr/include -isystem $DEVROOT/usr/include -mno-thumb -no-integrated-as"
|
||||
export AR="$DEVROOT/usr/bin/ar"
|
||||
export CC="clang"
|
||||
|
||||
|
||||
mkdir -p $INSTALL_DIR
|
||||
./configure --enable-neon --build=i386-apple-darwin`uname -r` --host=arm-eabi --prefix=$INSTALL_DIR
|
||||
|
||||
make clean
|
||||
make
|
||||
make install
|
||||
|
||||
exit 0
|
||||
1537
FFTS/Sources/FFTS/config.guess
vendored
1537
FFTS/Sources/FFTS/config.guess
vendored
File diff suppressed because it is too large
Load Diff
@@ -1,147 +0,0 @@
|
||||
/* config.h.in. Generated from configure.ac by autoheader. */
|
||||
|
||||
/* Define to disable dynamic code generation. */
|
||||
#undef DYNAMIC_DISABLED
|
||||
|
||||
/* JNI being built. */
|
||||
#undef ENABLE_JNI
|
||||
|
||||
/* Define to FFT in single precision. */
|
||||
#undef FFTS_PREC_SINGLE
|
||||
|
||||
/* Define to 1 if you have the declaration of `memalign', and to 0 if you
|
||||
don't. */
|
||||
#undef HAVE_DECL_MEMALIGN
|
||||
|
||||
/* Define to 1 if you have the declaration of `posix_memalign', and to 0 if
|
||||
you don't. */
|
||||
#undef HAVE_DECL_POSIX_MEMALIGN
|
||||
|
||||
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||
#undef HAVE_DLFCN_H
|
||||
|
||||
/* Define to 1 if you have the `gettimeofday' function. */
|
||||
#undef HAVE_GETTIMEOFDAY
|
||||
|
||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||
#undef HAVE_INTTYPES_H
|
||||
|
||||
/* Define to 1 if you have the `m' library (-lm). */
|
||||
#undef HAVE_LIBM
|
||||
|
||||
/* Define to 1 if you have the <memory.h> header file. */
|
||||
#undef HAVE_MEMORY_H
|
||||
|
||||
/* Define to FFT with ARM NEON. */
|
||||
#undef HAVE_NEON
|
||||
|
||||
/* Define to 1 if you have the `pow' function. */
|
||||
#undef HAVE_POW
|
||||
|
||||
/* Define to FFT with SSE. */
|
||||
#undef HAVE_SSE
|
||||
|
||||
/* Define to 1 if stdbool.h conforms to C99. */
|
||||
#undef HAVE_STDBOOL_H
|
||||
|
||||
/* Define to 1 if you have the <stdint.h> header file. */
|
||||
#undef HAVE_STDINT_H
|
||||
|
||||
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||
#undef HAVE_STDLIB_H
|
||||
|
||||
/* Define to 1 if you have the <strings.h> header file. */
|
||||
#undef HAVE_STRINGS_H
|
||||
|
||||
/* Define to 1 if you have the <string.h> header file. */
|
||||
#undef HAVE_STRING_H
|
||||
|
||||
/* Define to 1 if you have the <sys/socket.h> header file. */
|
||||
#undef HAVE_SYS_SOCKET_H
|
||||
|
||||
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||
#undef HAVE_SYS_STAT_H
|
||||
|
||||
/* Define to 1 if you have the <sys/time.h> header file. */
|
||||
#undef HAVE_SYS_TIME_H
|
||||
|
||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||
#undef HAVE_SYS_TYPES_H
|
||||
|
||||
/* Define to 1 if you have the <unistd.h> header file. */
|
||||
#undef HAVE_UNISTD_H
|
||||
|
||||
/* Define to FFT with ARM VFP. */
|
||||
#undef HAVE_VFP
|
||||
|
||||
/* Define to 1 if the system has the type `_Bool'. */
|
||||
#undef HAVE__BOOL
|
||||
|
||||
/* Define to the sub-directory in which libtool stores uninstalled libraries.
|
||||
*/
|
||||
#undef LT_OBJDIR
|
||||
|
||||
/* Name of package */
|
||||
#undef PACKAGE
|
||||
|
||||
/* Define to the address where bug reports for this package should be sent. */
|
||||
#undef PACKAGE_BUGREPORT
|
||||
|
||||
/* Define to the full name of this package. */
|
||||
#undef PACKAGE_NAME
|
||||
|
||||
/* Define to the full name and version of this package. */
|
||||
#undef PACKAGE_STRING
|
||||
|
||||
/* Define to the one symbol short name of this package. */
|
||||
#undef PACKAGE_TARNAME
|
||||
|
||||
/* Define to the home page for this package. */
|
||||
#undef PACKAGE_URL
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#undef PACKAGE_VERSION
|
||||
|
||||
/* Define to 1 if you have the ANSI C header files. */
|
||||
#undef STDC_HEADERS
|
||||
|
||||
/* Version number of package */
|
||||
#undef VERSION
|
||||
|
||||
/* Define for Solaris 2.5.1 so the uint64_t typedef from <sys/synch.h>,
|
||||
<pthread.h>, or <semaphore.h> is not used. If the typedef were allowed, the
|
||||
#define below would cause a syntax error. */
|
||||
#undef _UINT64_T
|
||||
|
||||
/* Define to `__inline__' or `__inline' if that's what the C compiler
|
||||
calls it, or to nothing if 'inline' is not supported under any name. */
|
||||
#ifndef __cplusplus
|
||||
#undef inline
|
||||
#endif
|
||||
|
||||
/* Define to the type of a signed integer type of width exactly 32 bits if
|
||||
such a type exists and the standard includes do not define it. */
|
||||
#undef int32_t
|
||||
|
||||
/* Define to the equivalent of the C99 'restrict' keyword, or to
|
||||
nothing if this is not supported. Do not define if restrict is
|
||||
supported directly. */
|
||||
#undef restrict
|
||||
/* Work around a bug in Sun C++: it does not support _Restrict or
|
||||
__restrict__, even though the corresponding Sun C compiler ends up with
|
||||
"#define restrict _Restrict" or "#define restrict __restrict__" in the
|
||||
previous line. Perhaps some future version of Sun C++ will work with
|
||||
restrict; if so, hopefully it defines __RESTRICT like Sun C does. */
|
||||
#if defined __SUNPRO_CC && !defined __RESTRICT
|
||||
# define _Restrict
|
||||
# define __restrict__
|
||||
#endif
|
||||
|
||||
/* Define to `unsigned int' if <sys/types.h> does not define. */
|
||||
#undef size_t
|
||||
|
||||
/* Define to the type of an unsigned integer type of width exactly 64 bits if
|
||||
such a type exists and the standard includes do not define it. */
|
||||
#undef uint64_t
|
||||
|
||||
// vim: set autoindent noexpandtab tabstop=3 shiftwidth=3:
|
||||
1786
FFTS/Sources/FFTS/config.sub
vendored
1786
FFTS/Sources/FFTS/config.sub
vendored
File diff suppressed because it is too large
Load Diff
19454
FFTS/Sources/FFTS/configure
vendored
19454
FFTS/Sources/FFTS/configure
vendored
File diff suppressed because it is too large
Load Diff
@@ -1,137 +0,0 @@
|
||||
# -*- Autoconf -*-
|
||||
# Process this file with autoconf to produce a configure script.
|
||||
|
||||
AC_PREREQ([2.65])
|
||||
AC_INIT(ffts, 0.7, amb@anthonix.com)
|
||||
AM_INIT_AUTOMAKE(ffts, 0.7)
|
||||
|
||||
AC_CONFIG_MACRO_DIR([m4])
|
||||
|
||||
# AC_CONFIG_SRCDIR([include/common.h])
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
|
||||
AC_CANONICAL_HOST
|
||||
|
||||
# Checks for programs.
|
||||
AC_PROG_CXX
|
||||
AC_PROG_CC
|
||||
#AX_COMPILER_VENDOR
|
||||
LT_INIT([disable-shared])
|
||||
AM_PROG_AS
|
||||
#CXX="clang++"
|
||||
#CXXFLAGS="$CXXFLAGS -stdlib=libc++"
|
||||
|
||||
#SFFT_AR="/usr/bin/ar"
|
||||
#SFFT_CFLAGS="$CFLAGS"
|
||||
#SFFT_CC="$CC"
|
||||
AC_ARG_ENABLE(dynamic-code, [AC_HELP_STRING([--enable-dynamic-code],[dynamically generate code])], sfft_dynamic=$enableval, sfft_dynamic=yes)
|
||||
if test "$sfft_dynamic" = "no"; then
|
||||
AC_DEFINE(DYNAMIC_DISABLED,1,[Define to disable dynamic code generation.])
|
||||
fi
|
||||
AM_CONDITIONAL(DYNAMIC_DISABLED, test "$sfft_dynamic" = "no")
|
||||
|
||||
AC_ARG_ENABLE(single, [AC_HELP_STRING([--enable-single],[compile single-precision library])], sfft_single=$enableval, sfft_single=no)
|
||||
if test "$sfft_single" = "yes"; then
|
||||
AC_DEFINE(FFTS_PREC_SINGLE,1,[Define to FFT in single precision.])
|
||||
fi
|
||||
if test "$sfft_single" = "no"; then
|
||||
AC_DEFINE(FFTS_PREC_SINGLE,0,[Define to FFT in single precision.])
|
||||
fi
|
||||
|
||||
AC_ARG_ENABLE(sse, [AC_HELP_STRING([--enable-sse],[enable SSE extensions])], have_sse=$enableval, have_sse=no)
|
||||
if test "$have_sse" = "yes"; then
|
||||
SIMD=sse
|
||||
AC_DEFINE(HAVE_SSE,1,[Define to FFT with SSE.])
|
||||
fi
|
||||
AM_CONDITIONAL(HAVE_SSE, test "$have_sse" = "yes")
|
||||
|
||||
AC_ARG_ENABLE(neon, [AC_HELP_STRING([--enable-neon],[enable NEON extensions])], have_neon=$enableval, have_neon=no)
|
||||
if test "$have_neon" = "yes"; then
|
||||
AC_DEFINE(HAVE_NEON,1,[Define to FFT with ARM NEON.])
|
||||
fi
|
||||
AM_CONDITIONAL(HAVE_NEON, test "$have_neon" = "yes")
|
||||
|
||||
AC_ARG_ENABLE(vfp, [AC_HELP_STRING([--enable-vfp],[enable VFP extensions])], have_vfp=$enableval, have_vfp=no)
|
||||
if test "$have_vfp" = "yes"; then
|
||||
AC_DEFINE(HAVE_VFP,1,[Define to FFT with ARM VFP.])
|
||||
fi
|
||||
AM_CONDITIONAL(HAVE_VFP, test "$have_vfp" = "yes")
|
||||
|
||||
AC_ARG_WITH(float-abi, [AS_HELP_STRING([--with-float-abi=ABI],[set float abi for arm, hard or softfp (default is softfp)])],
|
||||
float_abi=$withval, float_abi=softfp)
|
||||
|
||||
AC_ARG_ENABLE(jni, [AC_HELP_STRING([--enable-jni],[enable JNI binding])], have_jni=$enableval, have_jni=no)
|
||||
if test "$have_jni" = "yes"; then
|
||||
# Java stuff
|
||||
AX_JAVA_OPTIONS
|
||||
AC_CHECK_JAVA_HOME
|
||||
AC_CHECK_CLASSPATH
|
||||
AC_PROG_JAVAC
|
||||
# blah this whinges about something
|
||||
#AC_PROG_JAVAH
|
||||
AC_PROG_JAR
|
||||
AX_JNI_INCLUDE_DIR
|
||||
for JNI_INCLUDE_DIR in $JNI_INCLUDE_DIRS
|
||||
do
|
||||
JNI_CPPFLAGS="$JNI_CPPFLAGS -I$JNI_INCLUDE_DIR"
|
||||
done
|
||||
AC_SUBST(JNI_CPPFLAGS, [$JNI_CPPFLAGS])
|
||||
|
||||
AC_DEFINE(ENABLE_JNI,1,[JNI being built.])
|
||||
fi
|
||||
AM_CONDITIONAL(ENABLE_JNI, test "$have_jni" = "yes")
|
||||
|
||||
fpu=""
|
||||
AS_IF([test "$have_vfp" = "yes"],[fpu="-mfpu=vfp"],
|
||||
[test "$have_neon" = "yes"],[fpu="-mfpu=neon"],
|
||||
[])
|
||||
|
||||
AC_MSG_NOTICE([host is "${host}"])
|
||||
case "${host}" in
|
||||
arm* )
|
||||
CFLAGS="$CFLAGS -mfloat-abi=${float_abi} ${fpu} -std=c99"
|
||||
CCASFLAGS="$CCASFLAGS -mfloat-abi=${float_abi} ${fpu}"
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
|
||||
#if test "$ord_sr" = "no"; then
|
||||
# AC_DEFINE(SFFT_ORD_SR,0,[Define to enable ordinary split radix.])
|
||||
#fi
|
||||
|
||||
# Checks for libraries.
|
||||
AC_CHECK_LIB([m], [cos])
|
||||
AC_CHECK_DECLS([posix_memalign,
|
||||
memalign],,,
|
||||
[#define _XOPEN_SOURCE 600
|
||||
#include <stdlib.h>
|
||||
#include <malloc.h>])
|
||||
|
||||
# Checks for header files.
|
||||
AC_CHECK_HEADERS([malloc.h stddef.h stdint.h stdlib.h string.h sys/mman.h sys/socket.h sys/time.h unistd.h])
|
||||
|
||||
# Checks for typedefs, structures, and compiler characteristics.
|
||||
AC_HEADER_STDBOOL
|
||||
AC_C_INLINE
|
||||
AC_TYPE_INT32_T
|
||||
AC_C_RESTRICT
|
||||
AC_TYPE_SIZE_T
|
||||
AC_TYPE_UINT64_T
|
||||
AC_PROG_CC_STDC
|
||||
AC_PROG_INSTALL
|
||||
AC_PROG_LN_S
|
||||
AC_PROG_LIBTOOL
|
||||
|
||||
# Checks for library functions.
|
||||
#AC_FUNC_MALLOC
|
||||
AC_CHECK_FUNCS([gettimeofday pow])
|
||||
|
||||
|
||||
AC_CONFIG_FILES([Makefile
|
||||
src/Makefile
|
||||
tests/Makefile
|
||||
ffts.pc
|
||||
java/Makefile
|
||||
])
|
||||
AC_OUTPUT
|
||||
@@ -1,780 +0,0 @@
|
||||
#! /bin/sh
|
||||
# depcomp - compile a program generating dependencies as side-effects
|
||||
|
||||
scriptversion=2012-07-12.20; # UTC
|
||||
|
||||
# Copyright (C) 1999-2012 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
|
||||
|
||||
case $1 in
|
||||
'')
|
||||
echo "$0: No command. Try '$0 --help' for more information." 1>&2
|
||||
exit 1;
|
||||
;;
|
||||
-h | --h*)
|
||||
cat <<\EOF
|
||||
Usage: depcomp [--help] [--version] PROGRAM [ARGS]
|
||||
|
||||
Run PROGRAMS ARGS to compile a file, generating dependencies
|
||||
as side-effects.
|
||||
|
||||
Environment variables:
|
||||
depmode Dependency tracking mode.
|
||||
source Source file read by 'PROGRAMS ARGS'.
|
||||
object Object file output by 'PROGRAMS ARGS'.
|
||||
DEPDIR directory where to store dependencies.
|
||||
depfile Dependency file to output.
|
||||
tmpdepfile Temporary file to use when outputting dependencies.
|
||||
libtool Whether libtool is used (yes/no).
|
||||
|
||||
Report bugs to <bug-automake@gnu.org>.
|
||||
EOF
|
||||
exit $?
|
||||
;;
|
||||
-v | --v*)
|
||||
echo "depcomp $scriptversion"
|
||||
exit $?
|
||||
;;
|
||||
esac
|
||||
|
||||
# A tabulation character.
|
||||
tab=' '
|
||||
# A newline character.
|
||||
nl='
|
||||
'
|
||||
|
||||
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
|
||||
echo "depcomp: Variables source, object and depmode must be set" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
|
||||
depfile=${depfile-`echo "$object" |
|
||||
sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
|
||||
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
|
||||
|
||||
rm -f "$tmpdepfile"
|
||||
|
||||
# Some modes work just like other modes, but use different flags. We
|
||||
# parameterize here, but still list the modes in the big case below,
|
||||
# to make depend.m4 easier to write. Note that we *cannot* use a case
|
||||
# here, because this file can only contain one case statement.
|
||||
if test "$depmode" = hp; then
|
||||
# HP compiler uses -M and no extra arg.
|
||||
gccflag=-M
|
||||
depmode=gcc
|
||||
fi
|
||||
|
||||
if test "$depmode" = dashXmstdout; then
|
||||
# This is just like dashmstdout with a different argument.
|
||||
dashmflag=-xM
|
||||
depmode=dashmstdout
|
||||
fi
|
||||
|
||||
cygpath_u="cygpath -u -f -"
|
||||
if test "$depmode" = msvcmsys; then
|
||||
# This is just like msvisualcpp but w/o cygpath translation.
|
||||
# Just convert the backslash-escaped backslashes to single forward
|
||||
# slashes to satisfy depend.m4
|
||||
cygpath_u='sed s,\\\\,/,g'
|
||||
depmode=msvisualcpp
|
||||
fi
|
||||
|
||||
if test "$depmode" = msvc7msys; then
|
||||
# This is just like msvc7 but w/o cygpath translation.
|
||||
# Just convert the backslash-escaped backslashes to single forward
|
||||
# slashes to satisfy depend.m4
|
||||
cygpath_u='sed s,\\\\,/,g'
|
||||
depmode=msvc7
|
||||
fi
|
||||
|
||||
if test "$depmode" = xlc; then
|
||||
# IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations.
|
||||
gccflag=-qmakedep=gcc,-MF
|
||||
depmode=gcc
|
||||
fi
|
||||
|
||||
case "$depmode" in
|
||||
gcc3)
|
||||
## gcc 3 implements dependency tracking that does exactly what
|
||||
## we want. Yay! Note: for some reason libtool 1.4 doesn't like
|
||||
## it if -MD -MP comes after the -MF stuff. Hmm.
|
||||
## Unfortunately, FreeBSD c89 acceptance of flags depends upon
|
||||
## the command line argument order; so add the flags where they
|
||||
## appear in depend2.am. Note that the slowdown incurred here
|
||||
## affects only configure: in makefiles, %FASTDEP% shortcuts this.
|
||||
for arg
|
||||
do
|
||||
case $arg in
|
||||
-c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
|
||||
*) set fnord "$@" "$arg" ;;
|
||||
esac
|
||||
shift # fnord
|
||||
shift # $arg
|
||||
done
|
||||
"$@"
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
mv "$tmpdepfile" "$depfile"
|
||||
;;
|
||||
|
||||
gcc)
|
||||
## There are various ways to get dependency output from gcc. Here's
|
||||
## why we pick this rather obscure method:
|
||||
## - Don't want to use -MD because we'd like the dependencies to end
|
||||
## up in a subdir. Having to rename by hand is ugly.
|
||||
## (We might end up doing this anyway to support other compilers.)
|
||||
## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
|
||||
## -MM, not -M (despite what the docs say).
|
||||
## - Using -M directly means running the compiler twice (even worse
|
||||
## than renaming).
|
||||
if test -z "$gccflag"; then
|
||||
gccflag=-MD,
|
||||
fi
|
||||
"$@" -Wp,"$gccflag$tmpdepfile"
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
|
||||
## The second -e expression handles DOS-style file names with drive letters.
|
||||
sed -e 's/^[^:]*: / /' \
|
||||
-e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
|
||||
## This next piece of magic avoids the "deleted header file" problem.
|
||||
## The problem is that when a header file which appears in a .P file
|
||||
## is deleted, the dependency causes make to die (because there is
|
||||
## typically no way to rebuild the header). We avoid this by adding
|
||||
## dummy dependencies for each header file. Too bad gcc doesn't do
|
||||
## this for us directly.
|
||||
tr ' ' "$nl" < "$tmpdepfile" |
|
||||
## Some versions of gcc put a space before the ':'. On the theory
|
||||
## that the space means something, we add a space to the output as
|
||||
## well. hp depmode also adds that space, but also prefixes the VPATH
|
||||
## to the object. Take care to not repeat it in the output.
|
||||
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
## correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
|
||||
| sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
hp)
|
||||
# This case exists only to let depend.m4 do its work. It works by
|
||||
# looking at the text of this script. This case will never be run,
|
||||
# since it is checked for above.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
sgi)
|
||||
if test "$libtool" = yes; then
|
||||
"$@" "-Wp,-MDupdate,$tmpdepfile"
|
||||
else
|
||||
"$@" -MDupdate "$tmpdepfile"
|
||||
fi
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
|
||||
if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
|
||||
echo "$object : \\" > "$depfile"
|
||||
|
||||
# Clip off the initial element (the dependent). Don't try to be
|
||||
# clever and replace this with sed code, as IRIX sed won't handle
|
||||
# lines with more than a fixed number of characters (4096 in
|
||||
# IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
|
||||
# the IRIX cc adds comments like '#:fec' to the end of the
|
||||
# dependency line.
|
||||
tr ' ' "$nl" < "$tmpdepfile" \
|
||||
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
|
||||
tr "$nl" ' ' >> "$depfile"
|
||||
echo >> "$depfile"
|
||||
|
||||
# The second pass generates a dummy entry for each header file.
|
||||
tr ' ' "$nl" < "$tmpdepfile" \
|
||||
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
|
||||
>> "$depfile"
|
||||
else
|
||||
# The sourcefile does not contain any dependencies, so just
|
||||
# store a dummy comment line, to avoid errors with the Makefile
|
||||
# "include basename.Plo" scheme.
|
||||
echo "#dummy" > "$depfile"
|
||||
fi
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
xlc)
|
||||
# This case exists only to let depend.m4 do its work. It works by
|
||||
# looking at the text of this script. This case will never be run,
|
||||
# since it is checked for above.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
aix)
|
||||
# The C for AIX Compiler uses -M and outputs the dependencies
|
||||
# in a .u file. In older versions, this file always lives in the
|
||||
# current directory. Also, the AIX compiler puts '$object:' at the
|
||||
# start of each line; $object doesn't have directory information.
|
||||
# Version 6 uses the directory in both cases.
|
||||
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
|
||||
test "x$dir" = "x$object" && dir=
|
||||
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
|
||||
if test "$libtool" = yes; then
|
||||
tmpdepfile1=$dir$base.u
|
||||
tmpdepfile2=$base.u
|
||||
tmpdepfile3=$dir.libs/$base.u
|
||||
"$@" -Wc,-M
|
||||
else
|
||||
tmpdepfile1=$dir$base.u
|
||||
tmpdepfile2=$dir$base.u
|
||||
tmpdepfile3=$dir$base.u
|
||||
"$@" -M
|
||||
fi
|
||||
stat=$?
|
||||
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
|
||||
exit $stat
|
||||
fi
|
||||
|
||||
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
|
||||
do
|
||||
test -f "$tmpdepfile" && break
|
||||
done
|
||||
if test -f "$tmpdepfile"; then
|
||||
# Each line is of the form 'foo.o: dependent.h'.
|
||||
# Do two passes, one to just change these to
|
||||
# '$object: dependent.h' and one to simply 'dependent.h:'.
|
||||
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
|
||||
sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
|
||||
else
|
||||
# The sourcefile does not contain any dependencies, so just
|
||||
# store a dummy comment line, to avoid errors with the Makefile
|
||||
# "include basename.Plo" scheme.
|
||||
echo "#dummy" > "$depfile"
|
||||
fi
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
icc)
|
||||
# Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'.
|
||||
# However on
|
||||
# $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c
|
||||
# ICC 7.0 will fill foo.d with something like
|
||||
# foo.o: sub/foo.c
|
||||
# foo.o: sub/foo.h
|
||||
# which is wrong. We want
|
||||
# sub/foo.o: sub/foo.c
|
||||
# sub/foo.o: sub/foo.h
|
||||
# sub/foo.c:
|
||||
# sub/foo.h:
|
||||
# ICC 7.1 will output
|
||||
# foo.o: sub/foo.c sub/foo.h
|
||||
# and will wrap long lines using '\':
|
||||
# foo.o: sub/foo.c ... \
|
||||
# sub/foo.h ... \
|
||||
# ...
|
||||
# tcc 0.9.26 (FIXME still under development at the moment of writing)
|
||||
# will emit a similar output, but also prepend the continuation lines
|
||||
# with horizontal tabulation characters.
|
||||
"$@" -MD -MF "$tmpdepfile"
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
# Each line is of the form 'foo.o: dependent.h',
|
||||
# or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'.
|
||||
# Do two passes, one to just change these to
|
||||
# '$object: dependent.h' and one to simply 'dependent.h:'.
|
||||
sed -e "s/^[ $tab][ $tab]*/ /" -e "s,^[^:]*:,$object :," \
|
||||
< "$tmpdepfile" > "$depfile"
|
||||
sed '
|
||||
s/[ '"$tab"'][ '"$tab"']*/ /g
|
||||
s/^ *//
|
||||
s/ *\\*$//
|
||||
s/^[^:]*: *//
|
||||
/^$/d
|
||||
/:$/d
|
||||
s/$/ :/
|
||||
' < "$tmpdepfile" >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
## The order of this option in the case statement is important, since the
|
||||
## shell code in configure will try each of these formats in the order
|
||||
## listed in this file. A plain '-MD' option would be understood by many
|
||||
## compilers, so we must ensure this comes after the gcc and icc options.
|
||||
pgcc)
|
||||
# Portland's C compiler understands '-MD'.
|
||||
# Will always output deps to 'file.d' where file is the root name of the
|
||||
# source file under compilation, even if file resides in a subdirectory.
|
||||
# The object file name does not affect the name of the '.d' file.
|
||||
# pgcc 10.2 will output
|
||||
# foo.o: sub/foo.c sub/foo.h
|
||||
# and will wrap long lines using '\' :
|
||||
# foo.o: sub/foo.c ... \
|
||||
# sub/foo.h ... \
|
||||
# ...
|
||||
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
|
||||
test "x$dir" = "x$object" && dir=
|
||||
# Use the source, not the object, to determine the base name, since
|
||||
# that's sadly what pgcc will do too.
|
||||
base=`echo "$source" | sed -e 's|^.*/||' -e 's/\.[-_a-zA-Z0-9]*$//'`
|
||||
tmpdepfile="$base.d"
|
||||
|
||||
# For projects that build the same source file twice into different object
|
||||
# files, the pgcc approach of using the *source* file root name can cause
|
||||
# problems in parallel builds. Use a locking strategy to avoid stomping on
|
||||
# the same $tmpdepfile.
|
||||
lockdir="$base.d-lock"
|
||||
trap "echo '$0: caught signal, cleaning up...' >&2; rm -rf $lockdir" 1 2 13 15
|
||||
numtries=100
|
||||
i=$numtries
|
||||
while test $i -gt 0 ; do
|
||||
# mkdir is a portable test-and-set.
|
||||
if mkdir $lockdir 2>/dev/null; then
|
||||
# This process acquired the lock.
|
||||
"$@" -MD
|
||||
stat=$?
|
||||
# Release the lock.
|
||||
rm -rf $lockdir
|
||||
break
|
||||
else
|
||||
## the lock is being held by a different process,
|
||||
## wait until the winning process is done or we timeout
|
||||
while test -d $lockdir && test $i -gt 0; do
|
||||
sleep 1
|
||||
i=`expr $i - 1`
|
||||
done
|
||||
fi
|
||||
i=`expr $i - 1`
|
||||
done
|
||||
trap - 1 2 13 15
|
||||
if test $i -le 0; then
|
||||
echo "$0: failed to acquire lock after $numtries attempts" >&2
|
||||
echo "$0: check lockdir '$lockdir'" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if test $stat -ne 0; then
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
# Each line is of the form `foo.o: dependent.h',
|
||||
# or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
|
||||
# Do two passes, one to just change these to
|
||||
# `$object: dependent.h' and one to simply `dependent.h:'.
|
||||
sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
|
||||
# Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
# correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
|
||||
sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
hp2)
|
||||
# The "hp" stanza above does not work with aCC (C++) and HP's ia64
|
||||
# compilers, which have integrated preprocessors. The correct option
|
||||
# to use with these is +Maked; it writes dependencies to a file named
|
||||
# 'foo.d', which lands next to the object file, wherever that
|
||||
# happens to be.
|
||||
# Much of this is similar to the tru64 case; see comments there.
|
||||
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
|
||||
test "x$dir" = "x$object" && dir=
|
||||
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
|
||||
if test "$libtool" = yes; then
|
||||
tmpdepfile1=$dir$base.d
|
||||
tmpdepfile2=$dir.libs/$base.d
|
||||
"$@" -Wc,+Maked
|
||||
else
|
||||
tmpdepfile1=$dir$base.d
|
||||
tmpdepfile2=$dir$base.d
|
||||
"$@" +Maked
|
||||
fi
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile1" "$tmpdepfile2"
|
||||
exit $stat
|
||||
fi
|
||||
|
||||
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
|
||||
do
|
||||
test -f "$tmpdepfile" && break
|
||||
done
|
||||
if test -f "$tmpdepfile"; then
|
||||
sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
|
||||
# Add 'dependent.h:' lines.
|
||||
sed -ne '2,${
|
||||
s/^ *//
|
||||
s/ \\*$//
|
||||
s/$/:/
|
||||
p
|
||||
}' "$tmpdepfile" >> "$depfile"
|
||||
else
|
||||
echo "#dummy" > "$depfile"
|
||||
fi
|
||||
rm -f "$tmpdepfile" "$tmpdepfile2"
|
||||
;;
|
||||
|
||||
tru64)
|
||||
# The Tru64 compiler uses -MD to generate dependencies as a side
|
||||
# effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
|
||||
# At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
|
||||
# dependencies in 'foo.d' instead, so we check for that too.
|
||||
# Subdirectories are respected.
|
||||
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
|
||||
test "x$dir" = "x$object" && dir=
|
||||
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
|
||||
|
||||
if test "$libtool" = yes; then
|
||||
# With Tru64 cc, shared objects can also be used to make a
|
||||
# static library. This mechanism is used in libtool 1.4 series to
|
||||
# handle both shared and static libraries in a single compilation.
|
||||
# With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
|
||||
#
|
||||
# With libtool 1.5 this exception was removed, and libtool now
|
||||
# generates 2 separate objects for the 2 libraries. These two
|
||||
# compilations output dependencies in $dir.libs/$base.o.d and
|
||||
# in $dir$base.o.d. We have to check for both files, because
|
||||
# one of the two compilations can be disabled. We should prefer
|
||||
# $dir$base.o.d over $dir.libs/$base.o.d because the latter is
|
||||
# automatically cleaned when .libs/ is deleted, while ignoring
|
||||
# the former would cause a distcleancheck panic.
|
||||
tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
|
||||
tmpdepfile2=$dir$base.o.d # libtool 1.5
|
||||
tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
|
||||
tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
|
||||
"$@" -Wc,-MD
|
||||
else
|
||||
tmpdepfile1=$dir$base.o.d
|
||||
tmpdepfile2=$dir$base.d
|
||||
tmpdepfile3=$dir$base.d
|
||||
tmpdepfile4=$dir$base.d
|
||||
"$@" -MD
|
||||
fi
|
||||
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
|
||||
exit $stat
|
||||
fi
|
||||
|
||||
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
|
||||
do
|
||||
test -f "$tmpdepfile" && break
|
||||
done
|
||||
if test -f "$tmpdepfile"; then
|
||||
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
|
||||
sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
|
||||
else
|
||||
echo "#dummy" > "$depfile"
|
||||
fi
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
msvc7)
|
||||
if test "$libtool" = yes; then
|
||||
showIncludes=-Wc,-showIncludes
|
||||
else
|
||||
showIncludes=-showIncludes
|
||||
fi
|
||||
"$@" $showIncludes > "$tmpdepfile"
|
||||
stat=$?
|
||||
grep -v '^Note: including file: ' "$tmpdepfile"
|
||||
if test "$stat" = 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
# The first sed program below extracts the file names and escapes
|
||||
# backslashes for cygpath. The second sed program outputs the file
|
||||
# name when reading, but also accumulates all include files in the
|
||||
# hold buffer in order to output them again at the end. This only
|
||||
# works with sed implementations that can handle large buffers.
|
||||
sed < "$tmpdepfile" -n '
|
||||
/^Note: including file: *\(.*\)/ {
|
||||
s//\1/
|
||||
s/\\/\\\\/g
|
||||
p
|
||||
}' | $cygpath_u | sort -u | sed -n '
|
||||
s/ /\\ /g
|
||||
s/\(.*\)/'"$tab"'\1 \\/p
|
||||
s/.\(.*\) \\/\1:/
|
||||
H
|
||||
$ {
|
||||
s/.*/'"$tab"'/
|
||||
G
|
||||
p
|
||||
}' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
msvc7msys)
|
||||
# This case exists only to let depend.m4 do its work. It works by
|
||||
# looking at the text of this script. This case will never be run,
|
||||
# since it is checked for above.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
#nosideeffect)
|
||||
# This comment above is used by automake to tell side-effect
|
||||
# dependency tracking mechanisms from slower ones.
|
||||
|
||||
dashmstdout)
|
||||
# Important note: in order to support this mode, a compiler *must*
|
||||
# always write the preprocessed file to stdout, regardless of -o.
|
||||
"$@" || exit $?
|
||||
|
||||
# Remove the call to Libtool.
|
||||
if test "$libtool" = yes; then
|
||||
while test "X$1" != 'X--mode=compile'; do
|
||||
shift
|
||||
done
|
||||
shift
|
||||
fi
|
||||
|
||||
# Remove '-o $object'.
|
||||
IFS=" "
|
||||
for arg
|
||||
do
|
||||
case $arg in
|
||||
-o)
|
||||
shift
|
||||
;;
|
||||
$object)
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"
|
||||
shift # fnord
|
||||
shift # $arg
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
test -z "$dashmflag" && dashmflag=-M
|
||||
# Require at least two characters before searching for ':'
|
||||
# in the target name. This is to cope with DOS-style filenames:
|
||||
# a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
|
||||
"$@" $dashmflag |
|
||||
sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile"
|
||||
rm -f "$depfile"
|
||||
cat < "$tmpdepfile" > "$depfile"
|
||||
tr ' ' "$nl" < "$tmpdepfile" | \
|
||||
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
## correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
dashXmstdout)
|
||||
# This case only exists to satisfy depend.m4. It is never actually
|
||||
# run, as this mode is specially recognized in the preamble.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
makedepend)
|
||||
"$@" || exit $?
|
||||
# Remove any Libtool call
|
||||
if test "$libtool" = yes; then
|
||||
while test "X$1" != 'X--mode=compile'; do
|
||||
shift
|
||||
done
|
||||
shift
|
||||
fi
|
||||
# X makedepend
|
||||
shift
|
||||
cleared=no eat=no
|
||||
for arg
|
||||
do
|
||||
case $cleared in
|
||||
no)
|
||||
set ""; shift
|
||||
cleared=yes ;;
|
||||
esac
|
||||
if test $eat = yes; then
|
||||
eat=no
|
||||
continue
|
||||
fi
|
||||
case "$arg" in
|
||||
-D*|-I*)
|
||||
set fnord "$@" "$arg"; shift ;;
|
||||
# Strip any option that makedepend may not understand. Remove
|
||||
# the object too, otherwise makedepend will parse it as a source file.
|
||||
-arch)
|
||||
eat=yes ;;
|
||||
-*|$object)
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"; shift ;;
|
||||
esac
|
||||
done
|
||||
obj_suffix=`echo "$object" | sed 's/^.*\././'`
|
||||
touch "$tmpdepfile"
|
||||
${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
|
||||
rm -f "$depfile"
|
||||
# makedepend may prepend the VPATH from the source file name to the object.
|
||||
# No need to regex-escape $object, excess matching of '.' is harmless.
|
||||
sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
|
||||
sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \
|
||||
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
## correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile" "$tmpdepfile".bak
|
||||
;;
|
||||
|
||||
cpp)
|
||||
# Important note: in order to support this mode, a compiler *must*
|
||||
# always write the preprocessed file to stdout.
|
||||
"$@" || exit $?
|
||||
|
||||
# Remove the call to Libtool.
|
||||
if test "$libtool" = yes; then
|
||||
while test "X$1" != 'X--mode=compile'; do
|
||||
shift
|
||||
done
|
||||
shift
|
||||
fi
|
||||
|
||||
# Remove '-o $object'.
|
||||
IFS=" "
|
||||
for arg
|
||||
do
|
||||
case $arg in
|
||||
-o)
|
||||
shift
|
||||
;;
|
||||
$object)
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"
|
||||
shift # fnord
|
||||
shift # $arg
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
"$@" -E |
|
||||
sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
|
||||
-e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
|
||||
sed '$ s: \\$::' > "$tmpdepfile"
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
cat < "$tmpdepfile" >> "$depfile"
|
||||
sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
msvisualcpp)
|
||||
# Important note: in order to support this mode, a compiler *must*
|
||||
# always write the preprocessed file to stdout.
|
||||
"$@" || exit $?
|
||||
|
||||
# Remove the call to Libtool.
|
||||
if test "$libtool" = yes; then
|
||||
while test "X$1" != 'X--mode=compile'; do
|
||||
shift
|
||||
done
|
||||
shift
|
||||
fi
|
||||
|
||||
IFS=" "
|
||||
for arg
|
||||
do
|
||||
case "$arg" in
|
||||
-o)
|
||||
shift
|
||||
;;
|
||||
$object)
|
||||
shift
|
||||
;;
|
||||
"-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
|
||||
set fnord "$@"
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
"$@" -E 2>/dev/null |
|
||||
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
|
||||
echo "$tab" >> "$depfile"
|
||||
sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
msvcmsys)
|
||||
# This case exists only to let depend.m4 do its work. It works by
|
||||
# looking at the text of this script. This case will never be run,
|
||||
# since it is checked for above.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
none)
|
||||
exec "$@"
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Unknown depmode $depmode" 1>&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
# Local Variables:
|
||||
# mode: shell-script
|
||||
# sh-indentation: 2
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
||||
@@ -1,10 +0,0 @@
|
||||
prefix=@CMAKE_INSTALL_PREFIX@
|
||||
exec_prefix=${prefix}
|
||||
libdir=${exec_prefix}/lib
|
||||
includedir=${prefix}/include
|
||||
|
||||
Name: @CMAKE_PROJECT_NAME@
|
||||
Description: fast Fourier transform library
|
||||
Version: @FFTS_VERSION@
|
||||
Libs: -L${libdir} -lffts -lm
|
||||
Cflags: -I${includedir}/ffts
|
||||
@@ -1,10 +0,0 @@
|
||||
prefix=@prefix@
|
||||
exec_prefix=@exec_prefix@
|
||||
libdir=@libdir@
|
||||
includedir=@includedir@
|
||||
|
||||
Name: FFTS
|
||||
Description: fast Fourier transform library
|
||||
Version: @VERSION@
|
||||
Libs: -L${libdir} -lffts -lm
|
||||
Cflags: -I${includedir}/ffts
|
||||
@@ -1,114 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is part of FFTS.
|
||||
|
||||
Copyright (c) 2012, Anthony M. Blake
|
||||
Copyright (c) 2018, Jukka Ojanen <jukka.ojanen@kolumbus.fi>
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
* Neither the name of the organization nor the
|
||||
names of its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL ANTHONY M. BLAKE BE LIABLE FOR ANY
|
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef FFTS_H
|
||||
#define FFTS_H
|
||||
|
||||
#if defined (_MSC_VER) && (_MSC_VER >= 1020)
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#if (defined(_WIN32) || defined(WIN32)) && defined(FFTS_SHARED)
|
||||
# ifdef FFTS_BUILD
|
||||
# define FFTS_API __declspec(dllexport)
|
||||
# else
|
||||
# define FFTS_API __declspec(dllimport)
|
||||
# endif
|
||||
#else
|
||||
# if (__GNUC__ >= 4) || defined(HAVE_GCC_VISIBILITY)
|
||||
# define FFTS_API __attribute__ ((visibility("default")))
|
||||
# else
|
||||
# define FFTS_API
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* The direction of the transform
|
||||
(i.e, the sign of the exponent in the transform.)
|
||||
*/
|
||||
#define FFTS_FORWARD (-1)
|
||||
#define FFTS_BACKWARD (+1)
|
||||
|
||||
struct _ffts_plan_t;
|
||||
typedef struct _ffts_plan_t ffts_plan_t;
|
||||
|
||||
/* Complex data is stored in the interleaved format
|
||||
(i.e, the real and imaginary parts composing each
|
||||
element of complex data are stored adjacently in memory)
|
||||
|
||||
The multi-dimensional arrays passed are expected to be
|
||||
stored as a single contiguous block in row-major order
|
||||
*/
|
||||
FFTS_API ffts_plan_t*
|
||||
ffts_init_1d(size_t N, int sign);
|
||||
|
||||
FFTS_API ffts_plan_t*
|
||||
ffts_init_1d_64f(size_t N, int sign);
|
||||
|
||||
FFTS_API ffts_plan_t*
|
||||
ffts_init_2d(size_t N1, size_t N2, int sign);
|
||||
|
||||
FFTS_API ffts_plan_t*
|
||||
ffts_init_nd(int rank, size_t *Ns, int sign);
|
||||
|
||||
/* For real transforms, sign == FFTS_FORWARD implies a real-to-complex
|
||||
forwards tranform, and sign == FFTS_BACKWARD implies a complex-to-real
|
||||
backwards transform.
|
||||
|
||||
The output of a real-to-complex transform is N/2+1 complex numbers,
|
||||
where the redundant outputs have been omitted.
|
||||
*/
|
||||
FFTS_API ffts_plan_t*
|
||||
ffts_init_1d_real(size_t N, int sign);
|
||||
|
||||
FFTS_API ffts_plan_t*
|
||||
ffts_init_2d_real(size_t N1, size_t N2, int sign);
|
||||
|
||||
FFTS_API ffts_plan_t*
|
||||
ffts_init_nd_real(int rank, size_t *Ns, int sign);
|
||||
|
||||
FFTS_API void
|
||||
ffts_execute(ffts_plan_t *p, const void *input, void *output);
|
||||
|
||||
FFTS_API void
|
||||
ffts_free(ffts_plan_t *p);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* FFTS_H */
|
||||
@@ -1,527 +0,0 @@
|
||||
#!/bin/sh
|
||||
# install - install a program, script, or datafile
|
||||
|
||||
scriptversion=2011-11-20.07; # UTC
|
||||
|
||||
# This originates from X11R5 (mit/util/scripts/install.sh), which was
|
||||
# later released in X11R6 (xc/config/util/install.sh) with the
|
||||
# following copyright and license.
|
||||
#
|
||||
# Copyright (C) 1994 X Consortium
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to
|
||||
# deal in the Software without restriction, including without limitation the
|
||||
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
# sell copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
|
||||
# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
# Except as contained in this notice, the name of the X Consortium shall not
|
||||
# be used in advertising or otherwise to promote the sale, use or other deal-
|
||||
# ings in this Software without prior written authorization from the X Consor-
|
||||
# tium.
|
||||
#
|
||||
#
|
||||
# FSF changes to this file are in the public domain.
|
||||
#
|
||||
# Calling this script install-sh is preferred over install.sh, to prevent
|
||||
# 'make' implicit rules from creating a file called install from it
|
||||
# when there is no Makefile.
|
||||
#
|
||||
# This script is compatible with the BSD install script, but was written
|
||||
# from scratch.
|
||||
|
||||
nl='
|
||||
'
|
||||
IFS=" "" $nl"
|
||||
|
||||
# set DOITPROG to echo to test this script
|
||||
|
||||
# Don't use :- since 4.3BSD and earlier shells don't like it.
|
||||
doit=${DOITPROG-}
|
||||
if test -z "$doit"; then
|
||||
doit_exec=exec
|
||||
else
|
||||
doit_exec=$doit
|
||||
fi
|
||||
|
||||
# Put in absolute file names if you don't have them in your path;
|
||||
# or use environment vars.
|
||||
|
||||
chgrpprog=${CHGRPPROG-chgrp}
|
||||
chmodprog=${CHMODPROG-chmod}
|
||||
chownprog=${CHOWNPROG-chown}
|
||||
cmpprog=${CMPPROG-cmp}
|
||||
cpprog=${CPPROG-cp}
|
||||
mkdirprog=${MKDIRPROG-mkdir}
|
||||
mvprog=${MVPROG-mv}
|
||||
rmprog=${RMPROG-rm}
|
||||
stripprog=${STRIPPROG-strip}
|
||||
|
||||
posix_glob='?'
|
||||
initialize_posix_glob='
|
||||
test "$posix_glob" != "?" || {
|
||||
if (set -f) 2>/dev/null; then
|
||||
posix_glob=
|
||||
else
|
||||
posix_glob=:
|
||||
fi
|
||||
}
|
||||
'
|
||||
|
||||
posix_mkdir=
|
||||
|
||||
# Desired mode of installed file.
|
||||
mode=0755
|
||||
|
||||
chgrpcmd=
|
||||
chmodcmd=$chmodprog
|
||||
chowncmd=
|
||||
mvcmd=$mvprog
|
||||
rmcmd="$rmprog -f"
|
||||
stripcmd=
|
||||
|
||||
src=
|
||||
dst=
|
||||
dir_arg=
|
||||
dst_arg=
|
||||
|
||||
copy_on_change=false
|
||||
no_target_directory=
|
||||
|
||||
usage="\
|
||||
Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
|
||||
or: $0 [OPTION]... SRCFILES... DIRECTORY
|
||||
or: $0 [OPTION]... -t DIRECTORY SRCFILES...
|
||||
or: $0 [OPTION]... -d DIRECTORIES...
|
||||
|
||||
In the 1st form, copy SRCFILE to DSTFILE.
|
||||
In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
|
||||
In the 4th, create DIRECTORIES.
|
||||
|
||||
Options:
|
||||
--help display this help and exit.
|
||||
--version display version info and exit.
|
||||
|
||||
-c (ignored)
|
||||
-C install only if different (preserve the last data modification time)
|
||||
-d create directories instead of installing files.
|
||||
-g GROUP $chgrpprog installed files to GROUP.
|
||||
-m MODE $chmodprog installed files to MODE.
|
||||
-o USER $chownprog installed files to USER.
|
||||
-s $stripprog installed files.
|
||||
-t DIRECTORY install into DIRECTORY.
|
||||
-T report an error if DSTFILE is a directory.
|
||||
|
||||
Environment variables override the default commands:
|
||||
CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
|
||||
RMPROG STRIPPROG
|
||||
"
|
||||
|
||||
while test $# -ne 0; do
|
||||
case $1 in
|
||||
-c) ;;
|
||||
|
||||
-C) copy_on_change=true;;
|
||||
|
||||
-d) dir_arg=true;;
|
||||
|
||||
-g) chgrpcmd="$chgrpprog $2"
|
||||
shift;;
|
||||
|
||||
--help) echo "$usage"; exit $?;;
|
||||
|
||||
-m) mode=$2
|
||||
case $mode in
|
||||
*' '* | *' '* | *'
|
||||
'* | *'*'* | *'?'* | *'['*)
|
||||
echo "$0: invalid mode: $mode" >&2
|
||||
exit 1;;
|
||||
esac
|
||||
shift;;
|
||||
|
||||
-o) chowncmd="$chownprog $2"
|
||||
shift;;
|
||||
|
||||
-s) stripcmd=$stripprog;;
|
||||
|
||||
-t) dst_arg=$2
|
||||
# Protect names problematic for 'test' and other utilities.
|
||||
case $dst_arg in
|
||||
-* | [=\(\)!]) dst_arg=./$dst_arg;;
|
||||
esac
|
||||
shift;;
|
||||
|
||||
-T) no_target_directory=true;;
|
||||
|
||||
--version) echo "$0 $scriptversion"; exit $?;;
|
||||
|
||||
--) shift
|
||||
break;;
|
||||
|
||||
-*) echo "$0: invalid option: $1" >&2
|
||||
exit 1;;
|
||||
|
||||
*) break;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
|
||||
# When -d is used, all remaining arguments are directories to create.
|
||||
# When -t is used, the destination is already specified.
|
||||
# Otherwise, the last argument is the destination. Remove it from $@.
|
||||
for arg
|
||||
do
|
||||
if test -n "$dst_arg"; then
|
||||
# $@ is not empty: it contains at least $arg.
|
||||
set fnord "$@" "$dst_arg"
|
||||
shift # fnord
|
||||
fi
|
||||
shift # arg
|
||||
dst_arg=$arg
|
||||
# Protect names problematic for 'test' and other utilities.
|
||||
case $dst_arg in
|
||||
-* | [=\(\)!]) dst_arg=./$dst_arg;;
|
||||
esac
|
||||
done
|
||||
fi
|
||||
|
||||
if test $# -eq 0; then
|
||||
if test -z "$dir_arg"; then
|
||||
echo "$0: no input file specified." >&2
|
||||
exit 1
|
||||
fi
|
||||
# It's OK to call 'install-sh -d' without argument.
|
||||
# This can happen when creating conditional directories.
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if test -z "$dir_arg"; then
|
||||
do_exit='(exit $ret); exit $ret'
|
||||
trap "ret=129; $do_exit" 1
|
||||
trap "ret=130; $do_exit" 2
|
||||
trap "ret=141; $do_exit" 13
|
||||
trap "ret=143; $do_exit" 15
|
||||
|
||||
# Set umask so as not to create temps with too-generous modes.
|
||||
# However, 'strip' requires both read and write access to temps.
|
||||
case $mode in
|
||||
# Optimize common cases.
|
||||
*644) cp_umask=133;;
|
||||
*755) cp_umask=22;;
|
||||
|
||||
*[0-7])
|
||||
if test -z "$stripcmd"; then
|
||||
u_plus_rw=
|
||||
else
|
||||
u_plus_rw='% 200'
|
||||
fi
|
||||
cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
|
||||
*)
|
||||
if test -z "$stripcmd"; then
|
||||
u_plus_rw=
|
||||
else
|
||||
u_plus_rw=,u+rw
|
||||
fi
|
||||
cp_umask=$mode$u_plus_rw;;
|
||||
esac
|
||||
fi
|
||||
|
||||
for src
|
||||
do
|
||||
# Protect names problematic for 'test' and other utilities.
|
||||
case $src in
|
||||
-* | [=\(\)!]) src=./$src;;
|
||||
esac
|
||||
|
||||
if test -n "$dir_arg"; then
|
||||
dst=$src
|
||||
dstdir=$dst
|
||||
test -d "$dstdir"
|
||||
dstdir_status=$?
|
||||
else
|
||||
|
||||
# Waiting for this to be detected by the "$cpprog $src $dsttmp" command
|
||||
# might cause directories to be created, which would be especially bad
|
||||
# if $src (and thus $dsttmp) contains '*'.
|
||||
if test ! -f "$src" && test ! -d "$src"; then
|
||||
echo "$0: $src does not exist." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if test -z "$dst_arg"; then
|
||||
echo "$0: no destination specified." >&2
|
||||
exit 1
|
||||
fi
|
||||
dst=$dst_arg
|
||||
|
||||
# If destination is a directory, append the input filename; won't work
|
||||
# if double slashes aren't ignored.
|
||||
if test -d "$dst"; then
|
||||
if test -n "$no_target_directory"; then
|
||||
echo "$0: $dst_arg: Is a directory" >&2
|
||||
exit 1
|
||||
fi
|
||||
dstdir=$dst
|
||||
dst=$dstdir/`basename "$src"`
|
||||
dstdir_status=0
|
||||
else
|
||||
# Prefer dirname, but fall back on a substitute if dirname fails.
|
||||
dstdir=`
|
||||
(dirname "$dst") 2>/dev/null ||
|
||||
expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
|
||||
X"$dst" : 'X\(//\)[^/]' \| \
|
||||
X"$dst" : 'X\(//\)$' \| \
|
||||
X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
|
||||
echo X"$dst" |
|
||||
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
|
||||
s//\1/
|
||||
q
|
||||
}
|
||||
/^X\(\/\/\)[^/].*/{
|
||||
s//\1/
|
||||
q
|
||||
}
|
||||
/^X\(\/\/\)$/{
|
||||
s//\1/
|
||||
q
|
||||
}
|
||||
/^X\(\/\).*/{
|
||||
s//\1/
|
||||
q
|
||||
}
|
||||
s/.*/./; q'
|
||||
`
|
||||
|
||||
test -d "$dstdir"
|
||||
dstdir_status=$?
|
||||
fi
|
||||
fi
|
||||
|
||||
obsolete_mkdir_used=false
|
||||
|
||||
if test $dstdir_status != 0; then
|
||||
case $posix_mkdir in
|
||||
'')
|
||||
# Create intermediate dirs using mode 755 as modified by the umask.
|
||||
# This is like FreeBSD 'install' as of 1997-10-28.
|
||||
umask=`umask`
|
||||
case $stripcmd.$umask in
|
||||
# Optimize common cases.
|
||||
*[2367][2367]) mkdir_umask=$umask;;
|
||||
.*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
|
||||
|
||||
*[0-7])
|
||||
mkdir_umask=`expr $umask + 22 \
|
||||
- $umask % 100 % 40 + $umask % 20 \
|
||||
- $umask % 10 % 4 + $umask % 2
|
||||
`;;
|
||||
*) mkdir_umask=$umask,go-w;;
|
||||
esac
|
||||
|
||||
# With -d, create the new directory with the user-specified mode.
|
||||
# Otherwise, rely on $mkdir_umask.
|
||||
if test -n "$dir_arg"; then
|
||||
mkdir_mode=-m$mode
|
||||
else
|
||||
mkdir_mode=
|
||||
fi
|
||||
|
||||
posix_mkdir=false
|
||||
case $umask in
|
||||
*[123567][0-7][0-7])
|
||||
# POSIX mkdir -p sets u+wx bits regardless of umask, which
|
||||
# is incompatible with FreeBSD 'install' when (umask & 300) != 0.
|
||||
;;
|
||||
*)
|
||||
tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
|
||||
trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
|
||||
|
||||
if (umask $mkdir_umask &&
|
||||
exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
|
||||
then
|
||||
if test -z "$dir_arg" || {
|
||||
# Check for POSIX incompatibilities with -m.
|
||||
# HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
|
||||
# other-writable bit of parent directory when it shouldn't.
|
||||
# FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
|
||||
ls_ld_tmpdir=`ls -ld "$tmpdir"`
|
||||
case $ls_ld_tmpdir in
|
||||
d????-?r-*) different_mode=700;;
|
||||
d????-?--*) different_mode=755;;
|
||||
*) false;;
|
||||
esac &&
|
||||
$mkdirprog -m$different_mode -p -- "$tmpdir" && {
|
||||
ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
|
||||
test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
|
||||
}
|
||||
}
|
||||
then posix_mkdir=:
|
||||
fi
|
||||
rmdir "$tmpdir/d" "$tmpdir"
|
||||
else
|
||||
# Remove any dirs left behind by ancient mkdir implementations.
|
||||
rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
|
||||
fi
|
||||
trap '' 0;;
|
||||
esac;;
|
||||
esac
|
||||
|
||||
if
|
||||
$posix_mkdir && (
|
||||
umask $mkdir_umask &&
|
||||
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
|
||||
)
|
||||
then :
|
||||
else
|
||||
|
||||
# The umask is ridiculous, or mkdir does not conform to POSIX,
|
||||
# or it failed possibly due to a race condition. Create the
|
||||
# directory the slow way, step by step, checking for races as we go.
|
||||
|
||||
case $dstdir in
|
||||
/*) prefix='/';;
|
||||
[-=\(\)!]*) prefix='./';;
|
||||
*) prefix='';;
|
||||
esac
|
||||
|
||||
eval "$initialize_posix_glob"
|
||||
|
||||
oIFS=$IFS
|
||||
IFS=/
|
||||
$posix_glob set -f
|
||||
set fnord $dstdir
|
||||
shift
|
||||
$posix_glob set +f
|
||||
IFS=$oIFS
|
||||
|
||||
prefixes=
|
||||
|
||||
for d
|
||||
do
|
||||
test X"$d" = X && continue
|
||||
|
||||
prefix=$prefix$d
|
||||
if test -d "$prefix"; then
|
||||
prefixes=
|
||||
else
|
||||
if $posix_mkdir; then
|
||||
(umask=$mkdir_umask &&
|
||||
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
|
||||
# Don't fail if two instances are running concurrently.
|
||||
test -d "$prefix" || exit 1
|
||||
else
|
||||
case $prefix in
|
||||
*\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
|
||||
*) qprefix=$prefix;;
|
||||
esac
|
||||
prefixes="$prefixes '$qprefix'"
|
||||
fi
|
||||
fi
|
||||
prefix=$prefix/
|
||||
done
|
||||
|
||||
if test -n "$prefixes"; then
|
||||
# Don't fail if two instances are running concurrently.
|
||||
(umask $mkdir_umask &&
|
||||
eval "\$doit_exec \$mkdirprog $prefixes") ||
|
||||
test -d "$dstdir" || exit 1
|
||||
obsolete_mkdir_used=true
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if test -n "$dir_arg"; then
|
||||
{ test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
|
||||
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
|
||||
{ test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
|
||||
test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
|
||||
else
|
||||
|
||||
# Make a couple of temp file names in the proper directory.
|
||||
dsttmp=$dstdir/_inst.$$_
|
||||
rmtmp=$dstdir/_rm.$$_
|
||||
|
||||
# Trap to clean up those temp files at exit.
|
||||
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
|
||||
|
||||
# Copy the file name to the temp name.
|
||||
(umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
|
||||
|
||||
# and set any options; do chmod last to preserve setuid bits.
|
||||
#
|
||||
# If any of these fail, we abort the whole thing. If we want to
|
||||
# ignore errors from any of these, just make sure not to ignore
|
||||
# errors from the above "$doit $cpprog $src $dsttmp" command.
|
||||
#
|
||||
{ test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
|
||||
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
|
||||
{ test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
|
||||
{ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
|
||||
|
||||
# If -C, don't bother to copy if it wouldn't change the file.
|
||||
if $copy_on_change &&
|
||||
old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
|
||||
new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
|
||||
|
||||
eval "$initialize_posix_glob" &&
|
||||
$posix_glob set -f &&
|
||||
set X $old && old=:$2:$4:$5:$6 &&
|
||||
set X $new && new=:$2:$4:$5:$6 &&
|
||||
$posix_glob set +f &&
|
||||
|
||||
test "$old" = "$new" &&
|
||||
$cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
|
||||
then
|
||||
rm -f "$dsttmp"
|
||||
else
|
||||
# Rename the file to the real destination.
|
||||
$doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
|
||||
|
||||
# The rename failed, perhaps because mv can't rename something else
|
||||
# to itself, or perhaps because mv is so ancient that it does not
|
||||
# support -f.
|
||||
{
|
||||
# Now remove or move aside any old file at destination location.
|
||||
# We try this two ways since rm can't unlink itself on some
|
||||
# systems and the destination file might be busy for other
|
||||
# reasons. In this case, the final cleanup might fail but the new
|
||||
# file should still install successfully.
|
||||
{
|
||||
test ! -f "$dst" ||
|
||||
$doit $rmcmd -f "$dst" 2>/dev/null ||
|
||||
{ $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
|
||||
{ $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
|
||||
} ||
|
||||
{ echo "$0: cannot unlink or rename $dst" >&2
|
||||
(exit 1); exit 1
|
||||
}
|
||||
} &&
|
||||
|
||||
# Now rename the file to the real destination.
|
||||
$doit $mvcmd "$dsttmp" "$dst"
|
||||
}
|
||||
fi || exit 1
|
||||
|
||||
trap '' 0
|
||||
fi
|
||||
done
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
||||
@@ -1,33 +0,0 @@
|
||||
|
||||
# TODO: the ax_prog_javah thing doesn't work so this
|
||||
# requires javah in the path
|
||||
|
||||
if ENABLE_JNI
|
||||
JAVA_SRC=$(shell find $(srcdir)/src -name '*.java')
|
||||
|
||||
BUILT_SOURCES = nz_ac_waikato_ffts_FFTS.h
|
||||
|
||||
all: ffts.jar
|
||||
|
||||
classes ffts.jar: $(JAVA_SRC)
|
||||
-rm -rf classes
|
||||
mkdir classes
|
||||
$(JAVAC) -d classes -sourcepath src $(JAVA_SRC)
|
||||
$(JAR) -cf ffts.jar -C classes .
|
||||
|
||||
lib_LTLIBRARIES = libffts_jni.la
|
||||
libffts_jni_la_SOURCES = jni/ffts_jni.c
|
||||
nodist_include_HEADERS = nz_ac_waikato_ffts_FFTS.h
|
||||
libffts_jni_la_LIBADD = $(top_builddir)/src/libffts.la
|
||||
libffts_jni_la_CFLAGS = @JNI_CPPFLAGS@ $(AM_CFLAGS) -I$(top_srcdir)/include
|
||||
libffts_jni_la_LDFLAGS = -shared
|
||||
|
||||
pkgdata_DATA = ffts.jar
|
||||
|
||||
nz_ac_waikato_ffts_FFTS.h: classes
|
||||
javah -cp $< nz.ac.waikato.ffts.FFTS
|
||||
|
||||
CLEANFILES=ffts.jar nz_ac_waikato_ffts_FFTS.h
|
||||
clean-local:
|
||||
-rm -rf classes
|
||||
endif
|
||||
@@ -1,741 +0,0 @@
|
||||
# Makefile.in generated by automake 1.14 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
|
||||
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
|
||||
# TODO: the ax_prog_javah thing doesn't work so this
|
||||
# requires javah in the path
|
||||
|
||||
|
||||
|
||||
VPATH = @srcdir@
|
||||
am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
|
||||
am__make_running_with_option = \
|
||||
case $${target_option-} in \
|
||||
?) ;; \
|
||||
*) echo "am__make_running_with_option: internal error: invalid" \
|
||||
"target option '$${target_option-}' specified" >&2; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
has_opt=no; \
|
||||
sane_makeflags=$$MAKEFLAGS; \
|
||||
if $(am__is_gnu_make); then \
|
||||
sane_makeflags=$$MFLAGS; \
|
||||
else \
|
||||
case $$MAKEFLAGS in \
|
||||
*\\[\ \ ]*) \
|
||||
bs=\\; \
|
||||
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
|
||||
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
|
||||
esac; \
|
||||
fi; \
|
||||
skip_next=no; \
|
||||
strip_trailopt () \
|
||||
{ \
|
||||
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
|
||||
}; \
|
||||
for flg in $$sane_makeflags; do \
|
||||
test $$skip_next = yes && { skip_next=no; continue; }; \
|
||||
case $$flg in \
|
||||
*=*|--*) continue;; \
|
||||
-*I) strip_trailopt 'I'; skip_next=yes;; \
|
||||
-*I?*) strip_trailopt 'I';; \
|
||||
-*O) strip_trailopt 'O'; skip_next=yes;; \
|
||||
-*O?*) strip_trailopt 'O';; \
|
||||
-*l) strip_trailopt 'l'; skip_next=yes;; \
|
||||
-*l?*) strip_trailopt 'l';; \
|
||||
-[dEDm]) skip_next=yes;; \
|
||||
-[JT]) skip_next=yes;; \
|
||||
esac; \
|
||||
case $$flg in \
|
||||
*$$target_option*) has_opt=yes; break;; \
|
||||
esac; \
|
||||
done; \
|
||||
test $$has_opt = yes
|
||||
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
|
||||
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkglibexecdir = $(libexecdir)/@PACKAGE@
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
subdir = java
|
||||
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
|
||||
$(top_srcdir)/depcomp
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_classpath.m4 \
|
||||
$(top_srcdir)/m4/ax_check_java_home.m4 \
|
||||
$(top_srcdir)/m4/ax_java_options.m4 \
|
||||
$(top_srcdir)/m4/ax_jni_include_dir.m4 \
|
||||
$(top_srcdir)/m4/ax_prog_jar.m4 \
|
||||
$(top_srcdir)/m4/ax_prog_javac.m4 \
|
||||
$(top_srcdir)/m4/ax_prog_javac_works.m4 \
|
||||
$(top_srcdir)/configure.ac
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
CONFIG_CLEAN_VPATH_FILES =
|
||||
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
|
||||
am__vpath_adj = case $$p in \
|
||||
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
*) f=$$p;; \
|
||||
esac;
|
||||
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
|
||||
am__install_max = 40
|
||||
am__nobase_strip_setup = \
|
||||
srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
|
||||
am__nobase_strip = \
|
||||
for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
|
||||
am__nobase_list = $(am__nobase_strip_setup); \
|
||||
for p in $$list; do echo "$$p $$p"; done | \
|
||||
sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
|
||||
$(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
|
||||
if (++n[$$2] == $(am__install_max)) \
|
||||
{ print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
|
||||
END { for (dir in files) print dir, files[dir] }'
|
||||
am__base_list = \
|
||||
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
|
||||
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
|
||||
am__uninstall_files_from_dir = { \
|
||||
test -z "$$files" \
|
||||
|| { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
|
||||
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
|
||||
$(am__cd) "$$dir" && rm -f $$files; }; \
|
||||
}
|
||||
am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgdatadir)" \
|
||||
"$(DESTDIR)$(includedir)"
|
||||
LTLIBRARIES = $(lib_LTLIBRARIES)
|
||||
@ENABLE_JNI_TRUE@libffts_jni_la_DEPENDENCIES = \
|
||||
@ENABLE_JNI_TRUE@ $(top_builddir)/src/libffts.la
|
||||
am__libffts_jni_la_SOURCES_DIST = jni/ffts_jni.c
|
||||
@ENABLE_JNI_TRUE@am_libffts_jni_la_OBJECTS = \
|
||||
@ENABLE_JNI_TRUE@ libffts_jni_la-ffts_jni.lo
|
||||
libffts_jni_la_OBJECTS = $(am_libffts_jni_la_OBJECTS)
|
||||
AM_V_lt = $(am__v_lt_@AM_V@)
|
||||
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
|
||||
am__v_lt_0 = --silent
|
||||
am__v_lt_1 =
|
||||
libffts_jni_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
|
||||
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
|
||||
$(libffts_jni_la_CFLAGS) $(CFLAGS) $(libffts_jni_la_LDFLAGS) \
|
||||
$(LDFLAGS) -o $@
|
||||
@ENABLE_JNI_TRUE@am_libffts_jni_la_rpath = -rpath $(libdir)
|
||||
AM_V_P = $(am__v_P_@AM_V@)
|
||||
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
|
||||
am__v_P_0 = false
|
||||
am__v_P_1 = :
|
||||
AM_V_GEN = $(am__v_GEN_@AM_V@)
|
||||
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
|
||||
am__v_GEN_0 = @echo " GEN " $@;
|
||||
am__v_GEN_1 =
|
||||
AM_V_at = $(am__v_at_@AM_V@)
|
||||
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
|
||||
am__v_at_0 = @
|
||||
am__v_at_1 =
|
||||
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
|
||||
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
||||
am__depfiles_maybe = depfiles
|
||||
am__mv = mv -f
|
||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
|
||||
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
|
||||
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
|
||||
$(AM_CFLAGS) $(CFLAGS)
|
||||
AM_V_CC = $(am__v_CC_@AM_V@)
|
||||
am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
|
||||
am__v_CC_0 = @echo " CC " $@;
|
||||
am__v_CC_1 =
|
||||
CCLD = $(CC)
|
||||
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
|
||||
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
|
||||
$(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||
AM_V_CCLD = $(am__v_CCLD_@AM_V@)
|
||||
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
|
||||
am__v_CCLD_0 = @echo " CCLD " $@;
|
||||
am__v_CCLD_1 =
|
||||
SOURCES = $(libffts_jni_la_SOURCES)
|
||||
DIST_SOURCES = $(am__libffts_jni_la_SOURCES_DIST)
|
||||
am__can_run_installinfo = \
|
||||
case $$AM_UPDATE_INFO_DIR in \
|
||||
n|no|NO) false;; \
|
||||
*) (install-info --version) >/dev/null 2>&1;; \
|
||||
esac
|
||||
DATA = $(pkgdata_DATA)
|
||||
HEADERS = $(nodist_include_HEADERS)
|
||||
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
|
||||
# Read a list of newline-separated strings from the standard input,
|
||||
# and print each of them once, without duplicates. Input order is
|
||||
# *not* preserved.
|
||||
am__uniquify_input = $(AWK) '\
|
||||
BEGIN { nonempty = 0; } \
|
||||
{ items[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in items) print i; }; } \
|
||||
'
|
||||
# Make sure the list of sources is unique. This is necessary because,
|
||||
# e.g., the same source file might be shared among _SOURCES variables
|
||||
# for different programs/libraries.
|
||||
am__define_uniq_tagged_files = \
|
||||
list='$(am__tagged_files)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | $(am__uniquify_input)`
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMTAR = @AMTAR@
|
||||
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
|
||||
AR = @AR@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCAS = @CCAS@
|
||||
CCASDEPMODE = @CCASDEPMODE@
|
||||
CCASFLAGS = @CCASFLAGS@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
CXXDEPMODE = @CXXDEPMODE@
|
||||
CXXFLAGS = @CXXFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
DLLTOOL = @DLLTOOL@
|
||||
DSYMUTIL = @DSYMUTIL@
|
||||
DUMPBIN = @DUMPBIN@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
FGREP = @FGREP@
|
||||
GREP = @GREP@
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
JAR = @JAR@
|
||||
JAVA = @JAVA@
|
||||
JAVAC = @JAVAC@
|
||||
JAVACFLAGS = @JAVACFLAGS@
|
||||
JAVAFLAGS = @JAVAFLAGS@
|
||||
JAVAPREFIX = @JAVAPREFIX@
|
||||
JAVA_PATH_NAME = @JAVA_PATH_NAME@
|
||||
JNI_CPPFLAGS = @JNI_CPPFLAGS@
|
||||
LD = @LD@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LIPO = @LIPO@
|
||||
LN_S = @LN_S@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
MANIFEST_TOOL = @MANIFEST_TOOL@
|
||||
MKDIR_P = @MKDIR_P@
|
||||
NM = @NM@
|
||||
NMEDIT = @NMEDIT@
|
||||
OBJDUMP = @OBJDUMP@
|
||||
OBJEXT = @OBJEXT@
|
||||
OTOOL = @OTOOL@
|
||||
OTOOL64 = @OTOOL64@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_URL = @PACKAGE_URL@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
RANLIB = @RANLIB@
|
||||
SED = @SED@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
VERSION = @VERSION@
|
||||
_ACJNI_JAVAC = @_ACJNI_JAVAC@
|
||||
abs_builddir = @abs_builddir@
|
||||
abs_srcdir = @abs_srcdir@
|
||||
abs_top_builddir = @abs_top_builddir@
|
||||
abs_top_srcdir = @abs_top_srcdir@
|
||||
ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
builddir = @builddir@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
srcdir = @srcdir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target_alias = @target_alias@
|
||||
top_build_prefix = @top_build_prefix@
|
||||
top_builddir = @top_builddir@
|
||||
top_srcdir = @top_srcdir@
|
||||
@ENABLE_JNI_TRUE@JAVA_SRC = $(shell find $(srcdir)/src -name '*.java')
|
||||
@ENABLE_JNI_TRUE@BUILT_SOURCES = nz_ac_waikato_ffts_FFTS.h
|
||||
@ENABLE_JNI_TRUE@lib_LTLIBRARIES = libffts_jni.la
|
||||
@ENABLE_JNI_TRUE@libffts_jni_la_SOURCES = jni/ffts_jni.c
|
||||
@ENABLE_JNI_TRUE@nodist_include_HEADERS = nz_ac_waikato_ffts_FFTS.h
|
||||
@ENABLE_JNI_TRUE@libffts_jni_la_LIBADD = $(top_builddir)/src/libffts.la
|
||||
@ENABLE_JNI_TRUE@libffts_jni_la_CFLAGS = @JNI_CPPFLAGS@ $(AM_CFLAGS) -I$(top_srcdir)/include
|
||||
@ENABLE_JNI_TRUE@libffts_jni_la_LDFLAGS = -shared
|
||||
@ENABLE_JNI_TRUE@pkgdata_DATA = ffts.jar
|
||||
@ENABLE_JNI_TRUE@CLEANFILES = ffts.jar nz_ac_waikato_ffts_FFTS.h
|
||||
all: $(BUILT_SOURCES)
|
||||
$(MAKE) $(AM_MAKEFLAGS) all-am
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .lo .o .obj
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
|
||||
&& { if test -f $@; then exit 0; else break; fi; }; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu java/Makefile'; \
|
||||
$(am__cd) $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu java/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(am__aclocal_m4_deps):
|
||||
|
||||
install-libLTLIBRARIES: $(lib_LTLIBRARIES)
|
||||
@$(NORMAL_INSTALL)
|
||||
@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
|
||||
list2=; for p in $$list; do \
|
||||
if test -f $$p; then \
|
||||
list2="$$list2 $$p"; \
|
||||
else :; fi; \
|
||||
done; \
|
||||
test -z "$$list2" || { \
|
||||
echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \
|
||||
$(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \
|
||||
echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
|
||||
$(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
|
||||
}
|
||||
|
||||
uninstall-libLTLIBRARIES:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
|
||||
for p in $$list; do \
|
||||
$(am__strip_dir) \
|
||||
echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
|
||||
$(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
|
||||
done
|
||||
|
||||
clean-libLTLIBRARIES:
|
||||
-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
|
||||
@list='$(lib_LTLIBRARIES)'; \
|
||||
locs=`for p in $$list; do echo $$p; done | \
|
||||
sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
|
||||
sort -u`; \
|
||||
test -z "$$locs" || { \
|
||||
echo rm -f $${locs}; \
|
||||
rm -f $${locs}; \
|
||||
}
|
||||
|
||||
libffts_jni.la: $(libffts_jni_la_OBJECTS) $(libffts_jni_la_DEPENDENCIES) $(EXTRA_libffts_jni_la_DEPENDENCIES)
|
||||
$(AM_V_CCLD)$(libffts_jni_la_LINK) $(am_libffts_jni_la_rpath) $(libffts_jni_la_OBJECTS) $(libffts_jni_la_LIBADD) $(LIBS)
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT)
|
||||
|
||||
distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libffts_jni_la-ffts_jni.Plo@am__quote@
|
||||
|
||||
.c.o:
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
|
||||
|
||||
.c.obj:
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
|
||||
|
||||
.c.lo:
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
|
||||
|
||||
libffts_jni_la-ffts_jni.lo: jni/ffts_jni.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libffts_jni_la_CFLAGS) $(CFLAGS) -MT libffts_jni_la-ffts_jni.lo -MD -MP -MF $(DEPDIR)/libffts_jni_la-ffts_jni.Tpo -c -o libffts_jni_la-ffts_jni.lo `test -f 'jni/ffts_jni.c' || echo '$(srcdir)/'`jni/ffts_jni.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libffts_jni_la-ffts_jni.Tpo $(DEPDIR)/libffts_jni_la-ffts_jni.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='jni/ffts_jni.c' object='libffts_jni_la-ffts_jni.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libffts_jni_la_CFLAGS) $(CFLAGS) -c -o libffts_jni_la-ffts_jni.lo `test -f 'jni/ffts_jni.c' || echo '$(srcdir)/'`jni/ffts_jni.c
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
install-pkgdataDATA: $(pkgdata_DATA)
|
||||
@$(NORMAL_INSTALL)
|
||||
@list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \
|
||||
if test -n "$$list"; then \
|
||||
echo " $(MKDIR_P) '$(DESTDIR)$(pkgdatadir)'"; \
|
||||
$(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" || exit 1; \
|
||||
fi; \
|
||||
for p in $$list; do \
|
||||
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||
echo "$$d$$p"; \
|
||||
done | $(am__base_list) | \
|
||||
while read files; do \
|
||||
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgdatadir)'"; \
|
||||
$(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \
|
||||
done
|
||||
|
||||
uninstall-pkgdataDATA:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \
|
||||
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
|
||||
dir='$(DESTDIR)$(pkgdatadir)'; $(am__uninstall_files_from_dir)
|
||||
install-nodist_includeHEADERS: $(nodist_include_HEADERS)
|
||||
@$(NORMAL_INSTALL)
|
||||
@list='$(nodist_include_HEADERS)'; test -n "$(includedir)" || list=; \
|
||||
if test -n "$$list"; then \
|
||||
echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \
|
||||
$(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \
|
||||
fi; \
|
||||
for p in $$list; do \
|
||||
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||
echo "$$d$$p"; \
|
||||
done | $(am__base_list) | \
|
||||
while read files; do \
|
||||
echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \
|
||||
$(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \
|
||||
done
|
||||
|
||||
uninstall-nodist_includeHEADERS:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(nodist_include_HEADERS)'; test -n "$(includedir)" || list=; \
|
||||
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
|
||||
dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir)
|
||||
|
||||
ID: $(am__tagged_files)
|
||||
$(am__define_uniq_tagged_files); mkid -fID $$unique
|
||||
tags: tags-am
|
||||
TAGS: tags
|
||||
|
||||
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
|
||||
set x; \
|
||||
here=`pwd`; \
|
||||
$(am__define_uniq_tagged_files); \
|
||||
shift; \
|
||||
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
if test $$# -gt 0; then \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
"$$@" $$unique; \
|
||||
else \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$unique; \
|
||||
fi; \
|
||||
fi
|
||||
ctags: ctags-am
|
||||
|
||||
CTAGS: ctags
|
||||
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
|
||||
$(am__define_uniq_tagged_files); \
|
||||
test -z "$(CTAGS_ARGS)$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& $(am__cd) $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) "$$here"
|
||||
cscopelist: cscopelist-am
|
||||
|
||||
cscopelist-am: $(am__tagged_files)
|
||||
list='$(am__tagged_files)'; \
|
||||
case "$(srcdir)" in \
|
||||
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
|
||||
*) sdir=$(subdir)/$(srcdir) ;; \
|
||||
esac; \
|
||||
for i in $$list; do \
|
||||
if test -f "$$i"; then \
|
||||
echo "$(subdir)/$$i"; \
|
||||
else \
|
||||
echo "$$sdir/$$i"; \
|
||||
fi; \
|
||||
done >> $(top_builddir)/cscope.files
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
list='$(DISTFILES)'; \
|
||||
dist_files=`for file in $$list; do echo $$file; done | \
|
||||
sed -e "s|^$$srcdirstrip/||;t" \
|
||||
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
|
||||
case $$dist_files in \
|
||||
*/*) $(MKDIR_P) `echo "$$dist_files" | \
|
||||
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
|
||||
sort -u` ;; \
|
||||
esac; \
|
||||
for file in $$dist_files; do \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test -d "$(distdir)/$$file"; then \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
|
||||
else \
|
||||
test -f "$(distdir)/$$file" \
|
||||
|| cp -p $$d/$$file "$(distdir)/$$file" \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
check: $(BUILT_SOURCES)
|
||||
$(MAKE) $(AM_MAKEFLAGS) check-am
|
||||
all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS)
|
||||
installdirs:
|
||||
for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgdatadir)" "$(DESTDIR)$(includedir)"; do \
|
||||
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
|
||||
done
|
||||
install: $(BUILT_SOURCES)
|
||||
$(MAKE) $(AM_MAKEFLAGS) install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
uninstall: uninstall-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
if test -z '$(STRIP)'; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
install; \
|
||||
else \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
|
||||
fi
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
|
||||
@ENABLE_JNI_FALSE@clean-local:
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-generic clean-libLTLIBRARIES clean-libtool clean-local \
|
||||
mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -rf ./$(DEPDIR)
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-compile distclean-generic \
|
||||
distclean-tags
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
html-am:
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am: install-nodist_includeHEADERS install-pkgdataDATA
|
||||
|
||||
install-dvi: install-dvi-am
|
||||
|
||||
install-dvi-am:
|
||||
|
||||
install-exec-am: install-libLTLIBRARIES
|
||||
|
||||
install-html: install-html-am
|
||||
|
||||
install-html-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-info-am:
|
||||
|
||||
install-man:
|
||||
|
||||
install-pdf: install-pdf-am
|
||||
|
||||
install-pdf-am:
|
||||
|
||||
install-ps: install-ps-am
|
||||
|
||||
install-ps-am:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -rf ./$(DEPDIR)
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
|
||||
mostlyclean-libtool
|
||||
|
||||
pdf: pdf-am
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-libLTLIBRARIES uninstall-nodist_includeHEADERS \
|
||||
uninstall-pkgdataDATA
|
||||
|
||||
.MAKE: all check install install-am install-strip
|
||||
|
||||
.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
|
||||
clean-libLTLIBRARIES clean-libtool clean-local cscopelist-am \
|
||||
ctags ctags-am distclean distclean-compile distclean-generic \
|
||||
distclean-libtool distclean-tags distdir dvi dvi-am html \
|
||||
html-am info info-am install install-am install-data \
|
||||
install-data-am install-dvi install-dvi-am install-exec \
|
||||
install-exec-am install-html install-html-am install-info \
|
||||
install-info-am install-libLTLIBRARIES install-man \
|
||||
install-nodist_includeHEADERS install-pdf install-pdf-am \
|
||||
install-pkgdataDATA install-ps install-ps-am install-strip \
|
||||
installcheck installcheck-am installdirs maintainer-clean \
|
||||
maintainer-clean-generic mostlyclean mostlyclean-compile \
|
||||
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
|
||||
tags tags-am uninstall uninstall-am uninstall-libLTLIBRARIES \
|
||||
uninstall-nodist_includeHEADERS uninstall-pkgdataDATA
|
||||
|
||||
|
||||
@ENABLE_JNI_TRUE@all: ffts.jar
|
||||
|
||||
@ENABLE_JNI_TRUE@classes ffts.jar: $(JAVA_SRC)
|
||||
@ENABLE_JNI_TRUE@ -rm -rf classes
|
||||
@ENABLE_JNI_TRUE@ mkdir classes
|
||||
@ENABLE_JNI_TRUE@ $(JAVAC) -d classes -sourcepath src $(JAVA_SRC)
|
||||
@ENABLE_JNI_TRUE@ $(JAR) -cf ffts.jar -C classes .
|
||||
|
||||
@ENABLE_JNI_TRUE@nz_ac_waikato_ffts_FFTS.h: classes
|
||||
@ENABLE_JNI_TRUE@ javah -cp $< nz.ac.waikato.ffts.FFTS
|
||||
@ENABLE_JNI_TRUE@clean-local:
|
||||
@ENABLE_JNI_TRUE@ -rm -rf classes
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
@@ -1,9 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="gen"/>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
|
||||
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
|
||||
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
|
||||
<classpathentry kind="output" path="bin/classes"/>
|
||||
</classpath>
|
||||
@@ -1,40 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>ffts-android</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>com.android.ide.eclipse.adt.ApkBuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
<linkedResources>
|
||||
<link>
|
||||
<name>src</name>
|
||||
<type>2</type>
|
||||
<locationURI>PARENT-1-PROJECT_LOC/src</locationURI>
|
||||
</link>
|
||||
</linkedResources>
|
||||
</projectDescription>
|
||||
@@ -1,4 +0,0 @@
|
||||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
|
||||
org.eclipse.jdt.core.compiler.compliance=1.6
|
||||
org.eclipse.jdt.core.compiler.source=1.6
|
||||
@@ -1,2 +0,0 @@
|
||||
eclipse.preferences.version=1
|
||||
org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
|
||||
@@ -1,7 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="nz.waikato.ffts"
|
||||
android:versionCode="1"
|
||||
android:versionName="1.0">
|
||||
<uses-sdk android:minSdkVersion="8" />
|
||||
</manifest>
|
||||
@@ -1,18 +0,0 @@
|
||||
# This file is used to override default values used by the Ant build system.
|
||||
#
|
||||
# This file must be checked into Version Control Systems, as it is
|
||||
# integral to the build system of your project.
|
||||
|
||||
# This file is only used by the Ant script.
|
||||
|
||||
# You can use this to override default values such as
|
||||
# 'source.dir' for the location of your java source folder and
|
||||
# 'out.dir' for the location of your output folder.
|
||||
source.dir=../src
|
||||
|
||||
# You can also use it define how the release builds are signed by declaring
|
||||
# the following properties:
|
||||
# 'key.store' for the location of your keystore and
|
||||
# 'key.alias' for the name of the key to use.
|
||||
# The password will be asked during the build when you use the 'release' target.
|
||||
|
||||
@@ -1,92 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project name="ffts" default="help">
|
||||
|
||||
<!-- The local.properties file is created and updated by the 'android' tool.
|
||||
It contains the path to the SDK. It should *NOT* be checked into
|
||||
Version Control Systems. -->
|
||||
<property file="local.properties" />
|
||||
|
||||
<!-- The ant.properties file can be created by you. It is only edited by the
|
||||
'android' tool to add properties to it.
|
||||
This is the place to change some Ant specific build properties.
|
||||
Here are some properties you may want to change/update:
|
||||
|
||||
source.dir
|
||||
The name of the source directory. Default is 'src'.
|
||||
out.dir
|
||||
The name of the output directory. Default is 'bin'.
|
||||
|
||||
For other overridable properties, look at the beginning of the rules
|
||||
files in the SDK, at tools/ant/build.xml
|
||||
|
||||
Properties related to the SDK location or the project target should
|
||||
be updated using the 'android' tool with the 'update' action.
|
||||
|
||||
This file is an integral part of the build system for your
|
||||
application and should be checked into Version Control Systems.
|
||||
|
||||
-->
|
||||
<property file="ant.properties" />
|
||||
|
||||
<!-- if sdk.dir was not set from one of the property file, then
|
||||
get it from the ANDROID_HOME env var.
|
||||
This must be done before we load project.properties since
|
||||
the proguard config can use sdk.dir -->
|
||||
<property environment="env" />
|
||||
<condition property="sdk.dir" value="${env.ANDROID_HOME}">
|
||||
<isset property="env.ANDROID_HOME" />
|
||||
</condition>
|
||||
|
||||
<!-- The project.properties file is created and updated by the 'android'
|
||||
tool, as well as ADT.
|
||||
|
||||
This contains project specific properties such as project target, and library
|
||||
dependencies. Lower level build properties are stored in ant.properties
|
||||
(or in .classpath for Eclipse projects).
|
||||
|
||||
This file is an integral part of the build system for your
|
||||
application and should be checked into Version Control Systems. -->
|
||||
<loadproperties srcFile="project.properties" />
|
||||
|
||||
<!-- quick check on sdk.dir -->
|
||||
<fail
|
||||
message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through the ANDROID_HOME environment variable."
|
||||
unless="sdk.dir"
|
||||
/>
|
||||
|
||||
<!--
|
||||
Import per project custom build rules if present at the root of the project.
|
||||
This is the place to put custom intermediary targets such as:
|
||||
-pre-build
|
||||
-pre-compile
|
||||
-post-compile (This is typically used for code obfuscation.
|
||||
Compiled code location: ${out.classes.absolute.dir}
|
||||
If this is not done in place, override ${out.dex.input.absolute.dir})
|
||||
-post-package
|
||||
-post-build
|
||||
-pre-clean
|
||||
-->
|
||||
<import file="custom_rules.xml" optional="true" />
|
||||
|
||||
<!-- Import the actual build file.
|
||||
|
||||
To customize existing targets, there are two options:
|
||||
- Customize only one target:
|
||||
- copy/paste the target into this file, *before* the
|
||||
<import> task.
|
||||
- customize it to your needs.
|
||||
- Customize the whole content of build.xml
|
||||
- copy/paste the content of the rules files (minus the top node)
|
||||
into this file, replacing the <import> task.
|
||||
- customize to your needs.
|
||||
|
||||
***********************
|
||||
****** IMPORTANT ******
|
||||
***********************
|
||||
In all cases you must update the value of version-tag below to read 'custom' instead of an integer,
|
||||
in order to avoid having your file be overridden by tools such as "android update project"
|
||||
-->
|
||||
<!-- version-tag: 1 -->
|
||||
<import file="${sdk.dir}/tools/ant/build.xml" />
|
||||
|
||||
</project>
|
||||
@@ -1,25 +0,0 @@
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
|
||||
TOP=../../..
|
||||
|
||||
# Include the shared library
|
||||
#include $(CLEAR_VARS)
|
||||
#LOCAL_MODULE := ffts
|
||||
#LOCAL_SRC_FILES := ../../../src/.libs/libffts.so
|
||||
#include $(PREBUILT_SHARED_LIBRARY)
|
||||
|
||||
# Include the static library in shared lib
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := ffts
|
||||
LOCAL_SRC_FILES := $(TOP)/java/android/bin/lib/libffts.a
|
||||
LOCAL_EXPORT_C_INCLUDES := $(TOP)/include
|
||||
include $(PREBUILT_STATIC_LIBRARY)
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := ffts_jni
|
||||
LOCAL_CFLAGS := -I$(TOP)/include -I$(TOP)/java/jni -I$(TOP) -Wno-pointer-to-int-cast -Wno-int-to-pointer-cast
|
||||
LOCAL_SRC_FILES := $(TOP)/java/jni/ffts_jni.c
|
||||
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog
|
||||
LOCAL_STATIC_LIBRARIES := ffts
|
||||
|
||||
include $(BUILD_SHARED_LIBRARY)
|
||||
@@ -1,2 +0,0 @@
|
||||
# requires NEON atm
|
||||
APP_ABI := armeabi-v7a
|
||||
@@ -1,20 +0,0 @@
|
||||
# To enable ProGuard in your project, edit project.properties
|
||||
# to define the proguard.config property as described in that file.
|
||||
#
|
||||
# Add project specific ProGuard rules here.
|
||||
# By default, the flags in this file are appended to flags specified
|
||||
# in ${sdk.dir}/tools/proguard/proguard-android.txt
|
||||
# You can edit the include path and order by changing the ProGuard
|
||||
# include property in project.properties.
|
||||
#
|
||||
# For more details, see
|
||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||
|
||||
# Add any project specific keep options here:
|
||||
|
||||
# If your project uses WebView with JS, uncomment the following
|
||||
# and specify the fully qualified class name to the JavaScript interface
|
||||
# class:
|
||||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
||||
# public *;
|
||||
#}
|
||||
@@ -1,15 +0,0 @@
|
||||
# This file is automatically generated by Android Tools.
|
||||
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
|
||||
#
|
||||
# This file must be checked in Version Control Systems.
|
||||
#
|
||||
# To customize properties used by the Ant build system edit
|
||||
# "ant.properties", and override values to adapt the script to your
|
||||
# project structure.
|
||||
#
|
||||
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
|
||||
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
|
||||
|
||||
android.library=true
|
||||
# Project target.
|
||||
target=android-10
|
||||
@@ -1,237 +0,0 @@
|
||||
/*
|
||||
* This file is part of FFTS -- The Fastest Fourier Transform in the South
|
||||
*
|
||||
* Copyright (c) 2013, Michael Zucchi <notzed@gmail.com>
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of the organization nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ANTHONY M. BLAKE BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <ffts.h>
|
||||
#include <alloca.h>
|
||||
|
||||
// Bit of a hack for android, as we can't build the *.h without
|
||||
// the classes ... but we can't build the project without the jni.
|
||||
#ifdef ANDROID
|
||||
#include <jni.h>
|
||||
#define NEEDS_ALIGNED
|
||||
#undef HAVE_DECL_POSIX_MEMALIGN
|
||||
#else
|
||||
#include "nz_ac_waikato_ffts_FFTS.h"
|
||||
#endif
|
||||
|
||||
// TODO: feature tests instead
|
||||
#ifdef HAVE_SSE
|
||||
#define NEEDS_ALIGNED
|
||||
#endif
|
||||
|
||||
#ifdef NEEDS_ALIGNED
|
||||
#define ALIGN_MASK 15
|
||||
|
||||
static void *
|
||||
xmemalign(size_t align, size_t size) {
|
||||
#if defined(HAVE_DECL_POSIX_MEMALIGN)
|
||||
void *r;
|
||||
|
||||
if (posix_memalign(&r, align, size) != 0)
|
||||
return NULL;
|
||||
return r;
|
||||
#elif defined(HAVE_DECL_MEMALIGN)
|
||||
return memalign(align, size);
|
||||
#else
|
||||
#error "Require an aligning malloc"
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
throwOutOfMemoryError(JNIEnv *env, const char *msg) {
|
||||
jclass jc = (*env)->FindClass(env, "java/lang/OutOfMemoryError");
|
||||
|
||||
if (jc)
|
||||
(*env)->ThrowNew(env, jc, msg);
|
||||
}
|
||||
|
||||
JNIEXPORT jlong JNICALL Java_nz_ac_waikato_ffts_FFTS_complex_11d
|
||||
(JNIEnv *env, jclass jc, jint N, jint sign) {
|
||||
ffts_plan_t *plan;
|
||||
|
||||
plan = ffts_init_1d(N, sign);
|
||||
if (!plan)
|
||||
throwOutOfMemoryError(env, NULL);
|
||||
|
||||
return (jlong)plan;
|
||||
}
|
||||
|
||||
JNIEXPORT jlong JNICALL Java_nz_ac_waikato_ffts_FFTS_complex_12d
|
||||
(JNIEnv *env, jclass jc, jint N1, jint N2, jint sign) {
|
||||
ffts_plan_t *plan;
|
||||
|
||||
plan = ffts_init_2d(N1, N2, sign);
|
||||
if (!plan)
|
||||
throwOutOfMemoryError(env, NULL);
|
||||
|
||||
return (jlong)plan;
|
||||
}
|
||||
|
||||
JNIEXPORT jlong JNICALL Java_nz_ac_waikato_ffts_FFTS_complex_1nd
|
||||
(JNIEnv *env, jclass jc, jintArray jNs, jint sign) {
|
||||
ffts_plan_t *plan;
|
||||
int n = (*env)->GetArrayLength(env, jNs);
|
||||
int *cNs;
|
||||
size_t *Ns;
|
||||
int i;
|
||||
|
||||
// Needs to convert java int array to size_t array
|
||||
// Get the int elements and conver to C type
|
||||
Ns = alloca(sizeof(*Ns) * n);
|
||||
cNs = alloca(sizeof(int) * n);
|
||||
(*env)->GetIntArrayRegion(env, jNs, 0, n, cNs);
|
||||
for (i=0;i<n;i++)
|
||||
Ns[i] = cNs[i];
|
||||
|
||||
plan = ffts_init_nd(n, Ns, sign);
|
||||
if (!plan)
|
||||
throwOutOfMemoryError(env, NULL);
|
||||
|
||||
return (jlong)plan;
|
||||
}
|
||||
|
||||
JNIEXPORT jlong JNICALL Java_nz_ac_waikato_ffts_FFTS_real_11d
|
||||
(JNIEnv *env, jclass jc, jint N, jint sign) {
|
||||
ffts_plan_t *plan;
|
||||
|
||||
plan = ffts_init_1d_real(N, sign);
|
||||
if (!plan)
|
||||
throwOutOfMemoryError(env, NULL);
|
||||
|
||||
return (jlong)plan;
|
||||
}
|
||||
|
||||
JNIEXPORT jlong JNICALL Java_nz_ac_waikato_ffts_FFTS_real_12d
|
||||
(JNIEnv *env, jclass jc, jint N1, jint N2, jint sign) {
|
||||
ffts_plan_t *plan;
|
||||
|
||||
plan = ffts_init_2d_real(N1, N2, sign);
|
||||
if (!plan)
|
||||
throwOutOfMemoryError(env, NULL);
|
||||
|
||||
return (jlong)plan;
|
||||
}
|
||||
|
||||
JNIEXPORT jlong JNICALL Java_nz_ac_waikato_ffts_FFTS_real_1nd
|
||||
(JNIEnv *env, jclass jc, jintArray jNs, jint sign) {
|
||||
ffts_plan_t *plan;
|
||||
int n = (*env)->GetArrayLength(env, jNs);
|
||||
int *cNs;
|
||||
size_t *Ns;
|
||||
int i;
|
||||
|
||||
// Needs to convert java int array to size_t array
|
||||
// Get the int elements and conver to C type
|
||||
Ns = alloca(sizeof(*Ns) * n);
|
||||
cNs = alloca(sizeof(int) * n);
|
||||
(*env)->GetIntArrayRegion(env, jNs, 0, n, cNs);
|
||||
for (i=0;i<n;i++)
|
||||
Ns[i] = cNs[i];
|
||||
|
||||
plan = ffts_init_nd_real(n, Ns, sign);
|
||||
if (!plan)
|
||||
throwOutOfMemoryError(env, NULL);
|
||||
|
||||
return (jlong)plan;
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_nz_ac_waikato_ffts_FFTS_execute__JJ_3FI_3FI
|
||||
(JNIEnv *env, jclass jc, jlong p, jlong size, jfloatArray jsrc, jint soff, jfloatArray jdst, jint doff) {
|
||||
ffts_plan_t *plan = (ffts_plan_t *)p;
|
||||
|
||||
// TODO: check performance on android/arm
|
||||
#ifdef NEEDS_ALIGNED
|
||||
// On oracle jvm this is faster than GetFloatArrayElements()
|
||||
void *src, *dst;
|
||||
|
||||
src = xmemalign(64, size * 4);
|
||||
if (!src) {
|
||||
throwOutOfMemoryError(env, NULL);
|
||||
return;
|
||||
}
|
||||
dst = xmemalign(64, size * 4);
|
||||
if (!dst) {
|
||||
free(src);
|
||||
throwOutOfMemoryError(env, NULL);
|
||||
return;
|
||||
}
|
||||
|
||||
(*env)->GetFloatArrayRegion(env, jsrc, 0, size, src + soff);
|
||||
ffts_execute(plan, src, dst);
|
||||
(*env)->SetFloatArrayRegion(env, jdst, 0, size, dst + doff);
|
||||
|
||||
free(dst);
|
||||
free(src);
|
||||
#else
|
||||
// This is the fastest with oracle jvm, but doesn't work with sse ...
|
||||
void *src = (*env)->GetPrimitiveArrayCritical(env, jsrc, NULL);
|
||||
void *dst = (*env)->GetPrimitiveArrayCritical(env, jdst, NULL);
|
||||
|
||||
ffts_execute(plan, src + soff, dst + doff);
|
||||
|
||||
(*env)->ReleasePrimitiveArrayCritical(env, jdst, dst, 0);
|
||||
(*env)->ReleasePrimitiveArrayCritical(env, jsrc, src, 0);
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
// This is the slowest
|
||||
void *src = (*env)->GetFloatArrayElements(env, jsrc, NULL);
|
||||
void *dst = (*env)->GetFloatArrayElements(env, jdst, NULL);
|
||||
|
||||
ffts_execute(plan, src + soff, dst + doff);
|
||||
|
||||
(*env)->ReleaseFloatArrayElements(env, jdst, dst, 0);
|
||||
(*env)->ReleaseFloatArrayElements(env, jsrc, src, 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_nz_ac_waikato_ffts_FFTS_execute__JJLjava_nio_FloatBuffer_2Ljava_nio_FloatBuffer_2
|
||||
(JNIEnv *env, jclass jc, jlong p, jlong size, jobject jsrc, jobject jdst) {
|
||||
ffts_plan_t *plan = (ffts_plan_t *)p;
|
||||
void *src = (*env)->GetDirectBufferAddress(env, jsrc);
|
||||
void *dst = (*env)->GetDirectBufferAddress(env, jdst);
|
||||
|
||||
// Bounds checking etc is in java side.
|
||||
|
||||
ffts_execute(plan, src, dst);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_nz_ac_waikato_ffts_FFTS_free
|
||||
(JNIEnv *env, jclass jc, jlong p) {
|
||||
ffts_plan_t *plan = (ffts_plan_t *)p;
|
||||
|
||||
ffts_free(plan);
|
||||
}
|
||||
|
||||
// vim: set autoindent noexpandtab tabstop=3 shiftwidth=3:
|
||||
@@ -1,203 +0,0 @@
|
||||
/*
|
||||
* This file is part of FFTS -- The Fastest Fourier Transform in the South
|
||||
*
|
||||
* Copyright (c) 2013, Michael Zucchi <notzed@gmail.com>
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of the organization nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ANTHONY M. BLAKE BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
package nz.ac.waikato.ffts;
|
||||
|
||||
import java.nio.FloatBuffer;
|
||||
|
||||
/**
|
||||
* A java wrapper for ffts plans.
|
||||
*
|
||||
* Plans must currently be freed explicitly.
|
||||
*
|
||||
* @author notzed
|
||||
*/
|
||||
public class FFTS {
|
||||
|
||||
/**
|
||||
* C pointer
|
||||
*/
|
||||
private long p;
|
||||
/**
|
||||
* Minimum size of input
|
||||
*/
|
||||
final protected long inSize;
|
||||
/**
|
||||
* Minimum size of output
|
||||
*/
|
||||
final protected long outSize;
|
||||
|
||||
private FFTS(long p, long inSize) {
|
||||
this(p, inSize, inSize);
|
||||
}
|
||||
|
||||
private FFTS(long p, long inSize, long outSize) {
|
||||
this.p = p;
|
||||
this.inSize = inSize;
|
||||
this.outSize = inSize;
|
||||
}
|
||||
/**
|
||||
* The sign to use for a forward transform.
|
||||
*/
|
||||
public static final int FORWARD = -1;
|
||||
/**
|
||||
* The sign to use for a backward transform.
|
||||
*/
|
||||
public static final int BACKWARD = 1;
|
||||
|
||||
/**
|
||||
* Create a FFT plan for a 1-dimensional complex transform.
|
||||
*
|
||||
* The src and dst parameters to execute() use complex data.
|
||||
*
|
||||
* @param sign The direction of the transform.
|
||||
* @param N The size of the transform.
|
||||
* @return
|
||||
*/
|
||||
public static FFTS complex(int sign, int N) {
|
||||
return new FFTS(complex_1d(N, sign), N * 2);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a FFT plan for a 2-dimensional complex transform.
|
||||
* @param sign The direction of the transform.
|
||||
* @param N1 The size of the transform.
|
||||
* @param N2 The size of the transform.
|
||||
* @return
|
||||
*/
|
||||
public static FFTS complex(int sign, int N1, int N2) {
|
||||
return new FFTS(complex_2d(N1, N2, sign), N1 * N2 * 2);
|
||||
}
|
||||
|
||||
public static FFTS complex(int sign, int... Ns) {
|
||||
return new FFTS(complex_nd(Ns, sign), size(Ns) * 2);
|
||||
}
|
||||
|
||||
public static FFTS real(int sign, int N) {
|
||||
return new FFTS(real_1d(N, sign), sign == FORWARD ? N : (N / 2 + 1) * 2, sign == FORWARD ? (N / 2 + 1) * 2 : N);
|
||||
}
|
||||
|
||||
public static FFTS real(int sign, int N1, int N2) {
|
||||
return new FFTS(real_2d(N1, N2, sign), sign == FORWARD ? N1 * N2 : (N1 * N2 / 2 + 1) * 2, sign == FORWARD ? (N1 * N2 / 2 + 1) * 2 : N1 * N2);
|
||||
}
|
||||
|
||||
public static FFTS real(int sign, int... Ns) {
|
||||
return new FFTS(real_nd(Ns, sign), sign == FORWARD ? size(Ns) : (size(Ns) / 2 + 1) * 2, sign == FORWARD ? (size(Ns) / 2 + 1) * 2 : size(Ns));
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute this plan with the given array data.
|
||||
*
|
||||
* @param src
|
||||
* @param dst
|
||||
*/
|
||||
public void execute(float[] src, float[] dst) {
|
||||
execute(src, 0, dst, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute this plan with the given array data.
|
||||
* @param src
|
||||
* @param soff Start offset into src array.
|
||||
* @param dst
|
||||
* @param doff Start offset into dst array.
|
||||
*/
|
||||
public void execute(float[] src, int soff, float[] dst, int doff) {
|
||||
if (src.length - soff < inSize || dst.length - doff < outSize)
|
||||
throw new ArrayIndexOutOfBoundsException();
|
||||
if (p == 0)
|
||||
throw new NullPointerException();
|
||||
|
||||
execute(p, inSize, src, soff, dst, doff);
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute this plan with the given nio buffers. The bufffers
|
||||
* must be derived from direct buffers.
|
||||
*
|
||||
* The buffer position and limits are ignored.
|
||||
*
|
||||
* @param src
|
||||
* @param dst
|
||||
*/
|
||||
public void execute(FloatBuffer src, FloatBuffer dst) {
|
||||
if (src.capacity() < inSize || dst.capacity() < outSize)
|
||||
throw new ArrayIndexOutOfBoundsException();
|
||||
if (p == 0)
|
||||
throw new NullPointerException();
|
||||
|
||||
execute(p, inSize, src, dst);
|
||||
}
|
||||
|
||||
/**
|
||||
* Free the plan.
|
||||
*/
|
||||
public void free() {
|
||||
if (p == 0)
|
||||
throw new NullPointerException();
|
||||
free(p);
|
||||
}
|
||||
|
||||
/*
|
||||
* Calculate the number of elements required to store one
|
||||
* set of n-dimensional data.
|
||||
*/
|
||||
protected static long size(int[] Ns) {
|
||||
long s = Ns[0];
|
||||
for (int i = 1; i < Ns.length; i++)
|
||||
s *= Ns[i];
|
||||
return s;
|
||||
}
|
||||
|
||||
static {
|
||||
System.loadLibrary("ffts_jni");
|
||||
}
|
||||
|
||||
/*
|
||||
* Native interface
|
||||
*/
|
||||
protected static native long complex_1d(int N, int sign);
|
||||
|
||||
protected static native long complex_2d(int N1, int N2, int sign);
|
||||
|
||||
protected static native long complex_nd(int[] Ns, int sign);
|
||||
|
||||
protected static native long real_1d(int N, int sign);
|
||||
|
||||
protected static native long real_2d(int N1, int N2, int sign);
|
||||
|
||||
protected static native long real_nd(int[] Ns, int sign);
|
||||
|
||||
protected static native void execute(long p, long size, float[] src, int soff, float[] dst, int doff);
|
||||
|
||||
protected static native void execute(long p, long size, FloatBuffer src, FloatBuffer dst);
|
||||
|
||||
protected static native void free(long p);
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,144 +0,0 @@
|
||||
# ===========================================================================
|
||||
# http://www.gnu.org/software/autoconf-archive/ax_check_class.html
|
||||
# ===========================================================================
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
# AX_CHECK_CLASS
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# AX_CHECK_CLASS tests the existence of a given Java class, either in a
|
||||
# jar or in a '.class' file.
|
||||
#
|
||||
# *Warning*: its success or failure can depend on a proper setting of the
|
||||
# CLASSPATH env. variable.
|
||||
#
|
||||
# Note: This is part of the set of autoconf M4 macros for Java programs.
|
||||
# It is VERY IMPORTANT that you download the whole set, some macros depend
|
||||
# on other. Unfortunately, the autoconf archive does not support the
|
||||
# concept of set of macros, so I had to break it for submission. The
|
||||
# general documentation, as well as the sample configure.in, is included
|
||||
# in the AX_PROG_JAVA macro.
|
||||
#
|
||||
# LICENSE
|
||||
#
|
||||
# Copyright (c) 2008 Stephane Bortzmeyer <bortzmeyer@pasteur.fr>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the
|
||||
# Free Software Foundation; either version 2 of the License, or (at your
|
||||
# option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||
# Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# As a special exception, the respective Autoconf Macro's copyright owner
|
||||
# gives unlimited permission to copy, distribute and modify the configure
|
||||
# scripts that are the output of Autoconf when processing the Macro. You
|
||||
# need not follow the terms of the GNU General Public License when using
|
||||
# or distributing such scripts, even though portions of the text of the
|
||||
# Macro appear in them. The GNU General Public License (GPL) does govern
|
||||
# all other use of the material that constitutes the Autoconf Macro.
|
||||
#
|
||||
# This special exception to the GPL applies to versions of the Autoconf
|
||||
# Macro released by the Autoconf Archive. When you make and distribute a
|
||||
# modified version of the Autoconf Macro, you may extend this special
|
||||
# exception to the GPL to apply to your modified version as well.
|
||||
|
||||
#serial 7
|
||||
|
||||
AU_ALIAS([AC_CHECK_CLASS], [AX_CHECK_CLASS])
|
||||
AC_DEFUN([AX_CHECK_CLASS],[
|
||||
AC_REQUIRE([AX_PROG_JAVA])
|
||||
ac_var_name=`echo $1 | sed 's/\./_/g'`
|
||||
dnl Normaly I'd use a AC_CACHE_CHECK here but since the variable name is
|
||||
dnl dynamic I need an extra level of extraction
|
||||
AC_MSG_CHECKING([for $1 class])
|
||||
AC_CACHE_VAL(ax_cv_class_$ac_var_name, [
|
||||
if test x$ac_cv_prog_uudecode_base64 = xyes; then
|
||||
dnl /**
|
||||
dnl * Test.java: used to test dynamicaly if a class exists.
|
||||
dnl */
|
||||
dnl public class Test
|
||||
dnl {
|
||||
dnl
|
||||
dnl public static void
|
||||
dnl main( String[] argv )
|
||||
dnl {
|
||||
dnl Class lib;
|
||||
dnl if (argv.length < 1)
|
||||
dnl {
|
||||
dnl System.err.println ("Missing argument");
|
||||
dnl System.exit (77);
|
||||
dnl }
|
||||
dnl try
|
||||
dnl {
|
||||
dnl lib = Class.forName (argv[0]);
|
||||
dnl }
|
||||
dnl catch (ClassNotFoundException e)
|
||||
dnl {
|
||||
dnl System.exit (1);
|
||||
dnl }
|
||||
dnl lib = null;
|
||||
dnl System.exit (0);
|
||||
dnl }
|
||||
dnl
|
||||
dnl }
|
||||
cat << \EOF > Test.uue
|
||||
begin-base64 644 Test.class
|
||||
yv66vgADAC0AKQcAAgEABFRlc3QHAAQBABBqYXZhL2xhbmcvT2JqZWN0AQAE
|
||||
bWFpbgEAFihbTGphdmEvbGFuZy9TdHJpbmc7KVYBAARDb2RlAQAPTGluZU51
|
||||
bWJlclRhYmxlDAAKAAsBAANlcnIBABVMamF2YS9pby9QcmludFN0cmVhbTsJ
|
||||
AA0ACQcADgEAEGphdmEvbGFuZy9TeXN0ZW0IABABABBNaXNzaW5nIGFyZ3Vt
|
||||
ZW50DAASABMBAAdwcmludGxuAQAVKExqYXZhL2xhbmcvU3RyaW5nOylWCgAV
|
||||
ABEHABYBABNqYXZhL2lvL1ByaW50U3RyZWFtDAAYABkBAARleGl0AQAEKEkp
|
||||
VgoADQAXDAAcAB0BAAdmb3JOYW1lAQAlKExqYXZhL2xhbmcvU3RyaW5nOylM
|
||||
amF2YS9sYW5nL0NsYXNzOwoAHwAbBwAgAQAPamF2YS9sYW5nL0NsYXNzBwAi
|
||||
AQAgamF2YS9sYW5nL0NsYXNzTm90Rm91bmRFeGNlcHRpb24BAAY8aW5pdD4B
|
||||
AAMoKVYMACMAJAoAAwAlAQAKU291cmNlRmlsZQEACVRlc3QuamF2YQAhAAEA
|
||||
AwAAAAAAAgAJAAUABgABAAcAAABtAAMAAwAAACkqvgSiABCyAAwSD7YAFBBN
|
||||
uAAaKgMyuAAeTKcACE0EuAAaAUwDuAAasQABABMAGgAdACEAAQAIAAAAKgAK
|
||||
AAAACgAAAAsABgANAA4ADgATABAAEwASAB4AFgAiABgAJAAZACgAGgABACMA
|
||||
JAABAAcAAAAhAAEAAQAAAAUqtwAmsQAAAAEACAAAAAoAAgAAAAQABAAEAAEA
|
||||
JwAAAAIAKA==
|
||||
====
|
||||
EOF
|
||||
if $UUDECODE Test.uue; then
|
||||
:
|
||||
else
|
||||
echo "configure: __oline__: uudecode had trouble decoding base 64 file 'Test.uue'" >&AS_MESSAGE_LOG_FD
|
||||
echo "configure: failed file was:" >&AS_MESSAGE_LOG_FD
|
||||
cat Test.uue >&AS_MESSAGE_LOG_FD
|
||||
ac_cv_prog_uudecode_base64=no
|
||||
fi
|
||||
rm -f Test.uue
|
||||
if AC_TRY_COMMAND($JAVA $JAVAFLAGS Test $1) >/dev/null 2>&1; then
|
||||
eval "ac_cv_class_$ac_var_name=yes"
|
||||
else
|
||||
eval "ac_cv_class_$ac_var_name=no"
|
||||
fi
|
||||
rm -f Test.class
|
||||
else
|
||||
AX_TRY_COMPILE_JAVA([$1], , [eval "ac_cv_class_$ac_var_name=yes"],
|
||||
[eval "ac_cv_class_$ac_var_name=no"])
|
||||
fi
|
||||
eval "ac_var_val=$`eval echo ac_cv_class_$ac_var_name`"
|
||||
eval "HAVE_$ac_var_name=$`echo ac_cv_class_$ac_var_val`"
|
||||
HAVE_LAST_CLASS=$ac_var_val
|
||||
if test x$ac_var_val = xyes; then
|
||||
ifelse([$2], , :, [$2])
|
||||
else
|
||||
ifelse([$3], , :, [$3])
|
||||
fi
|
||||
])
|
||||
dnl for some reason the above statment didn't fall though here?
|
||||
dnl do scripts have variable scoping?
|
||||
eval "ac_var_val=$`eval echo ac_cv_class_$ac_var_name`"
|
||||
AC_MSG_RESULT($ac_var_val)
|
||||
])
|
||||
@@ -1,60 +0,0 @@
|
||||
# ===========================================================================
|
||||
# http://www.gnu.org/software/autoconf-archive/ax_check_classpath.html
|
||||
# ===========================================================================
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
# AX_CHECK_CLASSPATH
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# AX_CHECK_CLASSPATH just displays the CLASSPATH, for the edification of
|
||||
# the user.
|
||||
#
|
||||
# Note: This is part of the set of autoconf M4 macros for Java programs.
|
||||
# It is VERY IMPORTANT that you download the whole set, some macros depend
|
||||
# on other. Unfortunately, the autoconf archive does not support the
|
||||
# concept of set of macros, so I had to break it for submission. The
|
||||
# general documentation, as well as the sample configure.in, is included
|
||||
# in the AX_PROG_JAVA macro.
|
||||
#
|
||||
# LICENSE
|
||||
#
|
||||
# Copyright (c) 2008 Stephane Bortzmeyer <bortzmeyer@pasteur.fr>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the
|
||||
# Free Software Foundation; either version 2 of the License, or (at your
|
||||
# option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||
# Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# As a special exception, the respective Autoconf Macro's copyright owner
|
||||
# gives unlimited permission to copy, distribute and modify the configure
|
||||
# scripts that are the output of Autoconf when processing the Macro. You
|
||||
# need not follow the terms of the GNU General Public License when using
|
||||
# or distributing such scripts, even though portions of the text of the
|
||||
# Macro appear in them. The GNU General Public License (GPL) does govern
|
||||
# all other use of the material that constitutes the Autoconf Macro.
|
||||
#
|
||||
# This special exception to the GPL applies to versions of the Autoconf
|
||||
# Macro released by the Autoconf Archive. When you make and distribute a
|
||||
# modified version of the Autoconf Macro, you may extend this special
|
||||
# exception to the GPL to apply to your modified version as well.
|
||||
|
||||
#serial 5
|
||||
|
||||
AU_ALIAS([AC_CHECK_CLASSPATH], [AX_CHECK_CLASSPATH])
|
||||
AC_DEFUN([AX_CHECK_CLASSPATH],[
|
||||
if test "x$CLASSPATH" = x; then
|
||||
echo "You have no CLASSPATH, I hope it is good"
|
||||
else
|
||||
echo "You have CLASSPATH $CLASSPATH, hope it is correct"
|
||||
fi
|
||||
])
|
||||
@@ -1,80 +0,0 @@
|
||||
# ===========================================================================
|
||||
# http://www.gnu.org/software/autoconf-archive/ax_check_java_home.html
|
||||
# ===========================================================================
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
# AX_CHECK_JAVA_HOME
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# Check for Sun Java (JDK / JRE) installation, where the 'java' VM is in.
|
||||
# If found, set environment variable JAVA_HOME = Java installation home,
|
||||
# else left JAVA_HOME untouch, which in most case means JAVA_HOME is
|
||||
# empty.
|
||||
#
|
||||
# LICENSE
|
||||
#
|
||||
# Copyright (c) 2008 Gleen Salmon <gleensalmon@yahoo.com>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the
|
||||
# Free Software Foundation; either version 2 of the License, or (at your
|
||||
# option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||
# Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# As a special exception, the respective Autoconf Macro's copyright owner
|
||||
# gives unlimited permission to copy, distribute and modify the configure
|
||||
# scripts that are the output of Autoconf when processing the Macro. You
|
||||
# need not follow the terms of the GNU General Public License when using
|
||||
# or distributing such scripts, even though portions of the text of the
|
||||
# Macro appear in them. The GNU General Public License (GPL) does govern
|
||||
# all other use of the material that constitutes the Autoconf Macro.
|
||||
#
|
||||
# This special exception to the GPL applies to versions of the Autoconf
|
||||
# Macro released by the Autoconf Archive. When you make and distribute a
|
||||
# modified version of the Autoconf Macro, you may extend this special
|
||||
# exception to the GPL to apply to your modified version as well.
|
||||
|
||||
#serial 6
|
||||
|
||||
AU_ALIAS([AC_CHECK_JAVA_HOME], [AX_CHECK_JAVA_HOME])
|
||||
|
||||
AC_DEFUN([AX_CHECK_JAVA_HOME],
|
||||
[AC_MSG_CHECKING([for JAVA_HOME])
|
||||
# We used a fake loop so that we can use "break" to exit when the result
|
||||
# is found.
|
||||
while true
|
||||
do
|
||||
# If the user defined JAVA_HOME, don't touch it.
|
||||
test "${JAVA_HOME+set}" = set && break
|
||||
|
||||
# On Mac OS X 10.5 and following, run /usr/libexec/java_home to get
|
||||
# the value of JAVA_HOME to use.
|
||||
# (http://developer.apple.com/library/mac/#qa/qa2001/qa1170.html).
|
||||
JAVA_HOME=`/usr/libexec/java_home 2>/dev/null`
|
||||
test x"$JAVA_HOME" != x && break
|
||||
|
||||
# See if we can find the java executable, and compute from there.
|
||||
TRY_JAVA_HOME=`ls -dr /usr/java/* 2> /dev/null | head -n 1`
|
||||
if test x$TRY_JAVA_HOME != x; then
|
||||
PATH=$PATH:$TRY_JAVA_HOME/bin
|
||||
fi
|
||||
AC_PATH_PROG([JAVA_PATH_NAME], [java])
|
||||
if test "x$JAVA_PATH_NAME" != x; then
|
||||
JAVA_HOME=`echo $JAVA_PATH_NAME | sed "s/\(.*\)[[/]]bin[[/]]java.*/\1/"`
|
||||
break
|
||||
fi
|
||||
|
||||
AC_MSG_NOTICE([Could not compute JAVA_HOME])
|
||||
break
|
||||
done
|
||||
AC_MSG_RESULT([$JAVA_HOME])
|
||||
])
|
||||
@@ -1,101 +0,0 @@
|
||||
# ===========================================================================
|
||||
# http://www.gnu.org/software/autoconf-archive/ax_check_java_plugin.html
|
||||
# ===========================================================================
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
# AX_CHECK_JAVA_PLUGIN(<shell-variable>)
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# This macro sets <shell-variable> to empty on failure and to a compatible
|
||||
# version of plugin.jar otherwise. Directories searched are /usr/java/*
|
||||
# and /usr/local/java/*, which are assumed to be j{dk,re} installations.
|
||||
# Apply the shell variable as you see fit. If sun changes things so
|
||||
# <jre>/lib/plugin.jar is not the magic file it will stop working.
|
||||
#
|
||||
# This macro assumes that unzip, zipinfo or pkzipc is avialable (and can
|
||||
# list the contents of the jar archive). The first two are assumed to work
|
||||
# similarly enough to the infozip versisonms. The pkzipc version is
|
||||
# assumed to work if I undertstand the documentation on pkware's site but
|
||||
# YMMV. I do not have access to pwkware's version to test it.
|
||||
#
|
||||
# LICENSE
|
||||
#
|
||||
# Copyright (c) 2008 Duncan Simpson <dps@simpson.demon.co.uk>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the
|
||||
# Free Software Foundation; either version 2 of the License, or (at your
|
||||
# option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||
# Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# As a special exception, the respective Autoconf Macro's copyright owner
|
||||
# gives unlimited permission to copy, distribute and modify the configure
|
||||
# scripts that are the output of Autoconf when processing the Macro. You
|
||||
# need not follow the terms of the GNU General Public License when using
|
||||
# or distributing such scripts, even though portions of the text of the
|
||||
# Macro appear in them. The GNU General Public License (GPL) does govern
|
||||
# all other use of the material that constitutes the Autoconf Macro.
|
||||
#
|
||||
# This special exception to the GPL applies to versions of the Autoconf
|
||||
# Macro released by the Autoconf Archive. When you make and distribute a
|
||||
# modified version of the Autoconf Macro, you may extend this special
|
||||
# exception to the GPL to apply to your modified version as well.
|
||||
|
||||
#serial 6
|
||||
|
||||
AU_ALIAS([DPS_CHECK_PLUGIN], [AX_CHECK_JAVA_PLUGIN])
|
||||
AC_DEFUN([AX_CHECK_JAVA_PLUGIN],
|
||||
[AC_REQUIRE([AC_PROG_AWK])
|
||||
AC_REQUIRE([AC_PROG_FGREP])
|
||||
AC_CHECK_PROG(ZIPINFO,[zipinfo unzip pkzipc])
|
||||
AC_MSG_CHECKING([for the java plugin])
|
||||
case "x$ZIPINFO" in
|
||||
[*/zipinfo)]
|
||||
zipinf="zipinfo -1" ;;
|
||||
[*/unzip)]
|
||||
zipinf="unzip -l";;
|
||||
[*/pkzipc)]
|
||||
ziping="unzipc -view";;
|
||||
[x*)]
|
||||
AC_MSG_RESULT([skiped, none of zipinfo, unzip and pkzipc found])
|
||||
AC_SUBST($1,[])
|
||||
zipinf="";;
|
||||
esac
|
||||
if test "x$zipinf" != "x"; then
|
||||
jplugin=""
|
||||
for jhome in `ls -dr /usr/java/* /usr/local/java/* 2> /dev/null`; do
|
||||
for jfile in lib/plugin.jar jre/lib/plugin.jar; do
|
||||
if test "x$jplugin" = "x" && test -f "$jhome/$jfile"; then
|
||||
eval "$zipinf $jhome/$jfile | $AWK '{ print \$NF; }' | $FGREP netscape/javascript/JSObject" >/dev/null 2>/dev/null
|
||||
if test $? -eq 0; then
|
||||
dnl Some version of gcj (and javac) refuse to work with some files
|
||||
dnl that pass this test. To stop this problem make sure that the compiler
|
||||
dnl still works with this jar file in the classpath
|
||||
cat << \EOF > Test.java
|
||||
/* [#]line __oline__ "configure" */
|
||||
public class Test {
|
||||
}
|
||||
EOF
|
||||
if eval "$JAVAC -classpath $jhome/$jfile Test.java 2>/dev/null >/dev/null" && test -f Test.class; then
|
||||
jplugin="$jhome/$jfile"
|
||||
fi
|
||||
rm -f Test.java Test.class
|
||||
fi; fi; done; done
|
||||
if test "x$jplugin" != "x"; then
|
||||
AC_SUBST($1,$jplugin)
|
||||
AC_MSG_RESULT($jplugin)
|
||||
else
|
||||
AC_MSG_RESULT([java plugin not found])
|
||||
AC_SUBST($1,[])
|
||||
fi
|
||||
fi
|
||||
])
|
||||
@@ -1,85 +0,0 @@
|
||||
# ===========================================================================
|
||||
# http://www.gnu.org/software/autoconf-archive/ax_java_check_class.html
|
||||
# ===========================================================================
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
# AX_JAVA_CHECK_CLASS(<class>,<action-if-found>,<action-if-not-found>)
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# Test if a Java class is available. Based on AX_PROG_JAVAC_WORKS. This
|
||||
# version uses a cache variable which is both compiler, options and
|
||||
# classpath dependent (so if you switch from javac to gcj it correctly
|
||||
# notices and redoes the test).
|
||||
#
|
||||
# The macro tries to compile a minimal program importing <class>. Some
|
||||
# newer compilers moan about the failure to use this but fail or produce a
|
||||
# class file anyway. All moaing is sunk to /dev/null since I only wanted
|
||||
# to know if the class could be imported. This is a recommended followup
|
||||
# to AX_CHECK_JAVA_PLUGIN with classpath appropriately adjusted.
|
||||
#
|
||||
# LICENSE
|
||||
#
|
||||
# Copyright (c) 2008 Duncan Simpson <dps@simpson.demon.co.uk>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the
|
||||
# Free Software Foundation; either version 2 of the License, or (at your
|
||||
# option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||
# Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# As a special exception, the respective Autoconf Macro's copyright owner
|
||||
# gives unlimited permission to copy, distribute and modify the configure
|
||||
# scripts that are the output of Autoconf when processing the Macro. You
|
||||
# need not follow the terms of the GNU General Public License when using
|
||||
# or distributing such scripts, even though portions of the text of the
|
||||
# Macro appear in them. The GNU General Public License (GPL) does govern
|
||||
# all other use of the material that constitutes the Autoconf Macro.
|
||||
#
|
||||
# This special exception to the GPL applies to versions of the Autoconf
|
||||
# Macro released by the Autoconf Archive. When you make and distribute a
|
||||
# modified version of the Autoconf Macro, you may extend this special
|
||||
# exception to the GPL to apply to your modified version as well.
|
||||
|
||||
#serial 8
|
||||
|
||||
AU_ALIAS([DPS_JAVA_CHECK_CLASS], [AX_JAVA_CHECK_CLASS])
|
||||
AC_DEFUN([AX_JAVA_CHECK_CLASS],[
|
||||
m4_define([cache_val],[m4_translit(ax_cv_have_java_class_$1, " ." ,"__")])
|
||||
if test "x$CLASSPATH" != "x"; then
|
||||
xtra=" with classpath ${CLASSPATH}"
|
||||
xopts=`echo ${CLASSPATH} | ${SED} 's/^ *://'`
|
||||
xopts="-classpath $xopts"
|
||||
else xtra=""; xopts=""; fi
|
||||
cache_var="cache_val"AS_TR_SH([_Jc_${JAVAC}_Cp_${CLASSPATH}])
|
||||
AC_CACHE_CHECK([if the $1 class is avialable$xtra], [$cache_var], [
|
||||
JAVA_TEST=Test.java
|
||||
CLASS_TEST=Test.class
|
||||
cat << \EOF > $JAVA_TEST
|
||||
/* [#]xline __oline__ "configure" */
|
||||
import $1;
|
||||
public class Test {
|
||||
}
|
||||
EOF
|
||||
if AC_TRY_COMMAND($JAVAC $JAVACFLAGS $xopts $JAVA_TEST) >/dev/null 2>&1; then
|
||||
eval "${cache_var}=yes"
|
||||
else
|
||||
eval "${cache_var}=no"
|
||||
echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
|
||||
cat $JAVA_TEST >&AS_MESSAGE_LOG_FD
|
||||
fi
|
||||
rm -f $JAVA_TEST $CLASS_TEST
|
||||
])
|
||||
if eval 'test "x$'${cache_var}'" = "xyes"'; then
|
||||
$2
|
||||
true; else
|
||||
$3
|
||||
false; fi])
|
||||
@@ -1,48 +0,0 @@
|
||||
# ===========================================================================
|
||||
# http://www.gnu.org/software/autoconf-archive/ax_java_options.html
|
||||
# ===========================================================================
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
# AX_JAVA_OPTIONS
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# AX_JAVA_OPTIONS adds configure command line options used for Java m4
|
||||
# macros. This Macro is optional.
|
||||
#
|
||||
# Note: This is part of the set of autoconf M4 macros for Java programs.
|
||||
# It is VERY IMPORTANT that you download the whole set, some macros depend
|
||||
# on other. Unfortunately, the autoconf archive does not support the
|
||||
# concept of set of macros, so I had to break it for submission. The
|
||||
# general documentation, as well as the sample configure.in, is included
|
||||
# in the AX_PROG_JAVA macro.
|
||||
#
|
||||
# LICENSE
|
||||
#
|
||||
# Copyright (c) 2008 Devin Weaver <ktohg@tritarget.com>
|
||||
#
|
||||
# Copying and distribution of this file, with or without modification, are
|
||||
# permitted in any medium without royalty provided the copyright notice
|
||||
# and this notice are preserved. This file is offered as-is, without any
|
||||
# warranty.
|
||||
|
||||
#serial 6
|
||||
|
||||
AU_ALIAS([AC_JAVA_OPTIONS], [AX_JAVA_OPTIONS])
|
||||
AC_DEFUN([AX_JAVA_OPTIONS],[
|
||||
AC_ARG_WITH(java-prefix,
|
||||
[ --with-java-prefix=PFX prefix where Java runtime is installed (optional)])
|
||||
AC_ARG_WITH(javac-flags,
|
||||
[ --with-javac-flags=FLAGS flags to pass to the Java compiler (optional)])
|
||||
AC_ARG_WITH(java-flags,
|
||||
[ --with-java-flags=FLAGS flags to pass to the Java VM (optional)])
|
||||
JAVAPREFIX=$with_java_prefix
|
||||
JAVACFLAGS=$with_javac_flags
|
||||
JAVAFLAGS=$with_java_flags
|
||||
AC_SUBST(JAVAPREFIX)dnl
|
||||
AC_SUBST(JAVACFLAGS)dnl
|
||||
AC_SUBST(JAVAFLAGS)dnl
|
||||
AC_SUBST(JAVA)dnl
|
||||
AC_SUBST(JAVAC)dnl
|
||||
])
|
||||
@@ -1,120 +0,0 @@
|
||||
# ===========================================================================
|
||||
# http://www.gnu.org/software/autoconf-archive/ax_jni_include_dir.html
|
||||
# ===========================================================================
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
# AX_JNI_INCLUDE_DIR
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# AX_JNI_INCLUDE_DIR finds include directories needed for compiling
|
||||
# programs using the JNI interface.
|
||||
#
|
||||
# JNI include directories are usually in the java distribution This is
|
||||
# deduced from the value of JAVAC. When this macro completes, a list of
|
||||
# directories is left in the variable JNI_INCLUDE_DIRS.
|
||||
#
|
||||
# Example usage follows:
|
||||
#
|
||||
# AX_JNI_INCLUDE_DIR
|
||||
#
|
||||
# for JNI_INCLUDE_DIR in $JNI_INCLUDE_DIRS
|
||||
# do
|
||||
# CPPFLAGS="$CPPFLAGS -I$JNI_INCLUDE_DIR"
|
||||
# done
|
||||
#
|
||||
# If you want to force a specific compiler:
|
||||
#
|
||||
# - at the configure.in level, set JAVAC=yourcompiler before calling
|
||||
# AX_JNI_INCLUDE_DIR
|
||||
#
|
||||
# - at the configure level, setenv JAVAC
|
||||
#
|
||||
# Note: This macro can work with the autoconf M4 macros for Java programs.
|
||||
# This particular macro is not part of the original set of macros.
|
||||
#
|
||||
# LICENSE
|
||||
#
|
||||
# Copyright (c) 2008 Don Anderson <dda@sleepycat.com>
|
||||
#
|
||||
# Copying and distribution of this file, with or without modification, are
|
||||
# permitted in any medium without royalty provided the copyright notice
|
||||
# and this notice are preserved. This file is offered as-is, without any
|
||||
# warranty.
|
||||
|
||||
#serial 8
|
||||
|
||||
AU_ALIAS([AC_JNI_INCLUDE_DIR], [AX_JNI_INCLUDE_DIR])
|
||||
AC_DEFUN([AX_JNI_INCLUDE_DIR],[
|
||||
|
||||
JNI_INCLUDE_DIRS=""
|
||||
|
||||
test "x$JAVAC" = x && AC_MSG_ERROR(['\$JAVAC' undefined])
|
||||
AC_PATH_PROG([_ACJNI_JAVAC], [$JAVAC], [no])
|
||||
test "x$_ACJNI_JAVAC" = xno && AC_MSG_ERROR([$JAVAC could not be found in path])
|
||||
|
||||
_ACJNI_FOLLOW_SYMLINKS("$_ACJNI_JAVAC")
|
||||
_JTOPDIR=`echo "$_ACJNI_FOLLOWED" | sed -e 's://*:/:g' -e 's:/[[^/]]*$::'`
|
||||
case "$host_os" in
|
||||
darwin*) _JTOPDIR=`echo "$_JTOPDIR" | sed -e 's:/[[^/]]*$::'`
|
||||
_JINC="$_JTOPDIR/Headers";;
|
||||
*) _JINC="$_JTOPDIR/include";;
|
||||
esac
|
||||
_AS_ECHO_LOG([_JTOPDIR=$_JTOPDIR])
|
||||
_AS_ECHO_LOG([_JINC=$_JINC])
|
||||
|
||||
# On Mac OS X 10.6.4, jni.h is a symlink:
|
||||
# /System/Library/Frameworks/JavaVM.framework/Versions/Current/Headers/jni.h
|
||||
# -> ../../CurrentJDK/Headers/jni.h.
|
||||
if test -f "$_JINC/jni.h" || test -L "$_JINC/jni.h"; then
|
||||
JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $_JINC"
|
||||
else
|
||||
_JTOPDIR=`echo "$_JTOPDIR" | sed -e 's:/[[^/]]*$::'`
|
||||
if test -f "$_JTOPDIR/include/jni.h"; then
|
||||
JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $_JTOPDIR/include"
|
||||
else
|
||||
AC_MSG_ERROR([cannot find java include files])
|
||||
fi
|
||||
fi
|
||||
|
||||
# get the likely subdirectories for system specific java includes
|
||||
case "$host_os" in
|
||||
bsdi*) _JNI_INC_SUBDIRS="bsdos";;
|
||||
freebsd*) _JNI_INC_SUBDIRS="freebsd";;
|
||||
linux*) _JNI_INC_SUBDIRS="linux genunix";;
|
||||
osf*) _JNI_INC_SUBDIRS="alpha";;
|
||||
solaris*) _JNI_INC_SUBDIRS="solaris";;
|
||||
mingw*) _JNI_INC_SUBDIRS="win32";;
|
||||
cygwin*) _JNI_INC_SUBDIRS="win32";;
|
||||
*) _JNI_INC_SUBDIRS="genunix";;
|
||||
esac
|
||||
|
||||
# add any subdirectories that are present
|
||||
for JINCSUBDIR in $_JNI_INC_SUBDIRS
|
||||
do
|
||||
if test -d "$_JTOPDIR/include/$JINCSUBDIR"; then
|
||||
JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $_JTOPDIR/include/$JINCSUBDIR"
|
||||
fi
|
||||
done
|
||||
])
|
||||
|
||||
# _ACJNI_FOLLOW_SYMLINKS <path>
|
||||
# Follows symbolic links on <path>,
|
||||
# finally setting variable _ACJNI_FOLLOWED
|
||||
# ----------------------------------------
|
||||
AC_DEFUN([_ACJNI_FOLLOW_SYMLINKS],[
|
||||
# find the include directory relative to the javac executable
|
||||
_cur="$1"
|
||||
while ls -ld "$_cur" 2>/dev/null | grep " -> " >/dev/null; do
|
||||
AC_MSG_CHECKING([symlink for $_cur])
|
||||
_slink=`ls -ld "$_cur" | sed 's/.* -> //'`
|
||||
case "$_slink" in
|
||||
/*) _cur="$_slink";;
|
||||
# 'X' avoids triggering unwanted echo options.
|
||||
*) _cur=`echo "X$_cur" | sed -e 's/^X//' -e 's:[[^/]]*$::'`"$_slink";;
|
||||
esac
|
||||
AC_MSG_RESULT([$_cur])
|
||||
done
|
||||
_ACJNI_FOLLOWED="$_cur"
|
||||
])# _ACJNI
|
||||
@@ -1,52 +0,0 @@
|
||||
# ===========================================================================
|
||||
# http://www.gnu.org/software/autoconf-archive/ax_prog_jar.html
|
||||
# ===========================================================================
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
# AX_PROG_JAR
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# AX_PROG_JAR tests for an existing jar program. It uses the environment
|
||||
# variable JAR then tests in sequence various common jar programs.
|
||||
#
|
||||
# If you want to force a specific compiler:
|
||||
#
|
||||
# - at the configure.in level, set JAR=yourcompiler before calling
|
||||
# AX_PROG_JAR
|
||||
#
|
||||
# - at the configure level, setenv JAR
|
||||
#
|
||||
# You can use the JAR variable in your Makefile.in, with @JAR@.
|
||||
#
|
||||
# Note: This macro depends on the autoconf M4 macros for Java programs. It
|
||||
# is VERY IMPORTANT that you download that whole set, some macros depend
|
||||
# on other. Unfortunately, the autoconf archive does not support the
|
||||
# concept of set of macros, so I had to break it for submission.
|
||||
#
|
||||
# The general documentation of those macros, as well as the sample
|
||||
# configure.in, is included in the AX_PROG_JAVA macro.
|
||||
#
|
||||
# LICENSE
|
||||
#
|
||||
# Copyright (c) 2008 Egon Willighagen <e.willighagen@science.ru.nl>
|
||||
#
|
||||
# Copying and distribution of this file, with or without modification, are
|
||||
# permitted in any medium without royalty provided the copyright notice
|
||||
# and this notice are preserved. This file is offered as-is, without any
|
||||
# warranty.
|
||||
|
||||
#serial 6
|
||||
|
||||
AU_ALIAS([AC_PROG_JAR], [AX_PROG_JAR])
|
||||
AC_DEFUN([AX_PROG_JAR],[
|
||||
AC_REQUIRE([AC_EXEEXT])dnl
|
||||
if test "x$JAVAPREFIX" = x; then
|
||||
test "x$JAR" = x && AC_CHECK_PROGS(JAR, jar$EXEEXT)
|
||||
else
|
||||
test "x$JAR" = x && AC_CHECK_PROGS(JAR, jar, $JAVAPREFIX)
|
||||
fi
|
||||
test "x$JAR" = x && AC_MSG_ERROR([no acceptable jar program found in \$PATH])
|
||||
AC_PROVIDE([$0])dnl
|
||||
])
|
||||
@@ -1,115 +0,0 @@
|
||||
# ===========================================================================
|
||||
# http://www.gnu.org/software/autoconf-archive/ax_prog_java.html
|
||||
# ===========================================================================
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
# AX_PROG_JAVA
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# Here is a summary of the main macros:
|
||||
#
|
||||
# AX_PROG_JAVAC: finds a Java compiler.
|
||||
#
|
||||
# AX_PROG_JAVA: finds a Java virtual machine.
|
||||
#
|
||||
# AX_CHECK_CLASS: finds if we have the given class (beware of CLASSPATH!).
|
||||
#
|
||||
# AX_CHECK_RQRD_CLASS: finds if we have the given class and stops
|
||||
# otherwise.
|
||||
#
|
||||
# AX_TRY_COMPILE_JAVA: attempt to compile user given source.
|
||||
#
|
||||
# AX_TRY_RUN_JAVA: attempt to compile and run user given source.
|
||||
#
|
||||
# AX_JAVA_OPTIONS: adds Java configure options.
|
||||
#
|
||||
# AX_PROG_JAVA tests an existing Java virtual machine. It uses the
|
||||
# environment variable JAVA then tests in sequence various common Java
|
||||
# virtual machines. For political reasons, it starts with the free ones.
|
||||
# You *must* call [AX_PROG_JAVAC] before.
|
||||
#
|
||||
# If you want to force a specific VM:
|
||||
#
|
||||
# - at the configure.in level, set JAVA=yourvm before calling AX_PROG_JAVA
|
||||
#
|
||||
# (but after AC_INIT)
|
||||
#
|
||||
# - at the configure level, setenv JAVA
|
||||
#
|
||||
# You can use the JAVA variable in your Makefile.in, with @JAVA@.
|
||||
#
|
||||
# *Warning*: its success or failure can depend on a proper setting of the
|
||||
# CLASSPATH env. variable.
|
||||
#
|
||||
# TODO: allow to exclude virtual machines (rationale: most Java programs
|
||||
# cannot run with some VM like kaffe).
|
||||
#
|
||||
# Note: This is part of the set of autoconf M4 macros for Java programs.
|
||||
# It is VERY IMPORTANT that you download the whole set, some macros depend
|
||||
# on other. Unfortunately, the autoconf archive does not support the
|
||||
# concept of set of macros, so I had to break it for submission.
|
||||
#
|
||||
# A Web page, with a link to the latest CVS snapshot is at
|
||||
# <http://www.internatif.org/bortzmeyer/autoconf-Java/>.
|
||||
#
|
||||
# This is a sample configure.in Process this file with autoconf to produce
|
||||
# a configure script.
|
||||
#
|
||||
# AC_INIT(UnTag.java)
|
||||
#
|
||||
# dnl Checks for programs.
|
||||
# AC_CHECK_CLASSPATH
|
||||
# AX_PROG_JAVAC
|
||||
# AX_PROG_JAVA
|
||||
#
|
||||
# dnl Checks for classes
|
||||
# AX_CHECK_RQRD_CLASS(org.xml.sax.Parser)
|
||||
# AX_CHECK_RQRD_CLASS(com.jclark.xml.sax.Driver)
|
||||
#
|
||||
# AC_OUTPUT(Makefile)
|
||||
#
|
||||
# LICENSE
|
||||
#
|
||||
# Copyright (c) 2008 Stephane Bortzmeyer <bortzmeyer@pasteur.fr>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the
|
||||
# Free Software Foundation; either version 2 of the License, or (at your
|
||||
# option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||
# Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# As a special exception, the respective Autoconf Macro's copyright owner
|
||||
# gives unlimited permission to copy, distribute and modify the configure
|
||||
# scripts that are the output of Autoconf when processing the Macro. You
|
||||
# need not follow the terms of the GNU General Public License when using
|
||||
# or distributing such scripts, even though portions of the text of the
|
||||
# Macro appear in them. The GNU General Public License (GPL) does govern
|
||||
# all other use of the material that constitutes the Autoconf Macro.
|
||||
#
|
||||
# This special exception to the GPL applies to versions of the Autoconf
|
||||
# Macro released by the Autoconf Archive. When you make and distribute a
|
||||
# modified version of the Autoconf Macro, you may extend this special
|
||||
# exception to the GPL to apply to your modified version as well.
|
||||
|
||||
#serial 8
|
||||
|
||||
AU_ALIAS([AC_PROG_JAVA], [AX_PROG_JAVA])
|
||||
AC_DEFUN([AX_PROG_JAVA],[
|
||||
if test x$JAVAPREFIX = x; then
|
||||
test x$JAVA = x && AC_CHECK_PROGS(JAVA, kaffe java)
|
||||
else
|
||||
test x$JAVA = x && AC_CHECK_PROGS(JAVA, kaffe java, $JAVAPREFIX)
|
||||
fi
|
||||
test x$JAVA = x && AC_MSG_ERROR([no acceptable Java virtual machine found in \$PATH])
|
||||
AX_PROG_JAVA_WORKS
|
||||
AC_PROVIDE([$0])dnl
|
||||
])
|
||||
@@ -1,104 +0,0 @@
|
||||
# ===========================================================================
|
||||
# http://www.gnu.org/software/autoconf-archive/ax_prog_java_cc.html
|
||||
# ===========================================================================
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
# AX_PROG_JAVA_CC
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# Finds the appropriate java compiler on your path. By preference the java
|
||||
# compiler is gcj, then jikes then javac.
|
||||
#
|
||||
# The macro can take one argument specifying a space separated list of
|
||||
# java compiler names.
|
||||
#
|
||||
# For example:
|
||||
#
|
||||
# AX_PROG_JAVA_CC(javac, gcj)
|
||||
#
|
||||
# The macro also sets the compiler options variable: JAVA_CC_OPTS to
|
||||
# something sensible:
|
||||
#
|
||||
# - for GCJ it sets it to: @GCJ_OPTS@
|
||||
# (if GCJ_OPTS is not yet defined then it is set to "-C")
|
||||
#
|
||||
# - no other compiler has applicable options yet
|
||||
#
|
||||
# Here's an example configure.in:
|
||||
#
|
||||
# AC_INIT(Makefile.in)
|
||||
# AX_PROG_JAVA_CC()
|
||||
# AC_OUTPUT(Makefile)
|
||||
# dnl End.
|
||||
#
|
||||
# And here's the start of the Makefile.in:
|
||||
#
|
||||
# PROJECT_ROOT := @srcdir@
|
||||
# # Tool definitions.
|
||||
# JAVAC := @JAVA_CC@
|
||||
# JAVAC_OPTS := @JAVA_CC_OPTS@
|
||||
# JAR_TOOL := @jar_tool@
|
||||
#
|
||||
# LICENSE
|
||||
#
|
||||
# Copyright (c) 2008 Nic Ferrier <nferrier@tapsellferrier.co.uk>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the
|
||||
# Free Software Foundation; either version 2 of the License, or (at your
|
||||
# option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||
# Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# As a special exception, the respective Autoconf Macro's copyright owner
|
||||
# gives unlimited permission to copy, distribute and modify the configure
|
||||
# scripts that are the output of Autoconf when processing the Macro. You
|
||||
# need not follow the terms of the GNU General Public License when using
|
||||
# or distributing such scripts, even though portions of the text of the
|
||||
# Macro appear in them. The GNU General Public License (GPL) does govern
|
||||
# all other use of the material that constitutes the Autoconf Macro.
|
||||
#
|
||||
# This special exception to the GPL applies to versions of the Autoconf
|
||||
# Macro released by the Autoconf Archive. When you make and distribute a
|
||||
# modified version of the Autoconf Macro, you may extend this special
|
||||
# exception to the GPL to apply to your modified version as well.
|
||||
|
||||
#serial 4
|
||||
|
||||
# AX_PROG_JAVA_CC([COMPILER ...])
|
||||
# --------------------------
|
||||
# COMPILER ... is a space separated list of java compilers to search for.
|
||||
# This just gives the user an opportunity to specify an alternative
|
||||
# search list for the java compiler.
|
||||
AU_ALIAS([AC_PROG_JAVA_CC], [AX_PROG_JAVA_CC])
|
||||
AC_DEFUN([AX_PROG_JAVA_CC],
|
||||
[AC_ARG_VAR([JAVA_CC], [java compiler command])dnl
|
||||
AC_ARG_VAR([JAVA_CC_FLAGS], [java compiler flags])dnl
|
||||
m4_ifval([$1],
|
||||
[AC_CHECK_TOOLS(JAVA_CC, [$1])],
|
||||
[AC_CHECK_TOOL(JAVA_CC, gcj)
|
||||
if test -z "$JAVA_CC"; then
|
||||
AC_CHECK_TOOL(JAVA_CC, javac)
|
||||
fi
|
||||
if test -z "$JAVA_CC"; then
|
||||
AC_CHECK_TOOL(JAVA_CC, jikes)
|
||||
fi
|
||||
])
|
||||
|
||||
if test "$JAVA_CC" = "gcj"; then
|
||||
if test "$GCJ_OPTS" = ""; then
|
||||
AC_SUBST(GCJ_OPTS,-C)
|
||||
fi
|
||||
AC_SUBST(JAVA_CC_OPTS, @GCJ_OPTS@,
|
||||
[Define the compilation options for GCJ])
|
||||
fi
|
||||
test -z "$JAVA_CC" && AC_MSG_ERROR([no acceptable java compiler found in \$PATH])
|
||||
])# AX_PROG_JAVA_CC
|
||||
@@ -1,134 +0,0 @@
|
||||
# ===========================================================================
|
||||
# http://www.gnu.org/software/autoconf-archive/ax_prog_java_works.html
|
||||
# ===========================================================================
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
# AX_PROG_JAVA_WORKS
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# Internal use ONLY.
|
||||
#
|
||||
# Note: This is part of the set of autoconf M4 macros for Java programs.
|
||||
# It is VERY IMPORTANT that you download the whole set, some macros depend
|
||||
# on other. Unfortunately, the autoconf archive does not support the
|
||||
# concept of set of macros, so I had to break it for submission. The
|
||||
# general documentation, as well as the sample configure.in, is included
|
||||
# in the AX_PROG_JAVA macro.
|
||||
#
|
||||
# LICENSE
|
||||
#
|
||||
# Copyright (c) 2008 Stephane Bortzmeyer <bortzmeyer@pasteur.fr>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the
|
||||
# Free Software Foundation; either version 2 of the License, or (at your
|
||||
# option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||
# Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# As a special exception, the respective Autoconf Macro's copyright owner
|
||||
# gives unlimited permission to copy, distribute and modify the configure
|
||||
# scripts that are the output of Autoconf when processing the Macro. You
|
||||
# need not follow the terms of the GNU General Public License when using
|
||||
# or distributing such scripts, even though portions of the text of the
|
||||
# Macro appear in them. The GNU General Public License (GPL) does govern
|
||||
# all other use of the material that constitutes the Autoconf Macro.
|
||||
#
|
||||
# This special exception to the GPL applies to versions of the Autoconf
|
||||
# Macro released by the Autoconf Archive. When you make and distribute a
|
||||
# modified version of the Autoconf Macro, you may extend this special
|
||||
# exception to the GPL to apply to your modified version as well.
|
||||
|
||||
#serial 8
|
||||
|
||||
AU_ALIAS([AC_PROG_JAVA_WORKS], [AX_PROG_JAVA_WORKS])
|
||||
AC_DEFUN([AX_PROG_JAVA_WORKS], [
|
||||
AC_PATH_PROG(UUDECODE, uudecode, [no])
|
||||
if test x$UUDECODE != xno; then
|
||||
AC_CACHE_CHECK([if uudecode can decode base 64 file], ac_cv_prog_uudecode_base64, [
|
||||
dnl /**
|
||||
dnl * Test.java: used to test if java compiler works.
|
||||
dnl */
|
||||
dnl public class Test
|
||||
dnl {
|
||||
dnl
|
||||
dnl public static void
|
||||
dnl main( String[] argv )
|
||||
dnl {
|
||||
dnl System.exit (0);
|
||||
dnl }
|
||||
dnl
|
||||
dnl }
|
||||
cat << \EOF > Test.uue
|
||||
begin-base64 644 Test.class
|
||||
yv66vgADAC0AFQcAAgEABFRlc3QHAAQBABBqYXZhL2xhbmcvT2JqZWN0AQAE
|
||||
bWFpbgEAFihbTGphdmEvbGFuZy9TdHJpbmc7KVYBAARDb2RlAQAPTGluZU51
|
||||
bWJlclRhYmxlDAAKAAsBAARleGl0AQAEKEkpVgoADQAJBwAOAQAQamF2YS9s
|
||||
YW5nL1N5c3RlbQEABjxpbml0PgEAAygpVgwADwAQCgADABEBAApTb3VyY2VG
|
||||
aWxlAQAJVGVzdC5qYXZhACEAAQADAAAAAAACAAkABQAGAAEABwAAACEAAQAB
|
||||
AAAABQO4AAyxAAAAAQAIAAAACgACAAAACgAEAAsAAQAPABAAAQAHAAAAIQAB
|
||||
AAEAAAAFKrcAErEAAAABAAgAAAAKAAIAAAAEAAQABAABABMAAAACABQ=
|
||||
====
|
||||
EOF
|
||||
if $UUDECODE Test.uue; then
|
||||
ac_cv_prog_uudecode_base64=yes
|
||||
else
|
||||
echo "configure: __oline__: uudecode had trouble decoding base 64 file 'Test.uue'" >&AS_MESSAGE_LOG_FD
|
||||
echo "configure: failed file was:" >&AS_MESSAGE_LOG_FD
|
||||
cat Test.uue >&AS_MESSAGE_LOG_FD
|
||||
ac_cv_prog_uudecode_base64=no
|
||||
fi
|
||||
rm -f Test.uue])
|
||||
fi
|
||||
if test x$ac_cv_prog_uudecode_base64 != xyes; then
|
||||
rm -f Test.class
|
||||
AC_MSG_WARN([I have to compile Test.class from scratch])
|
||||
if test x$ac_cv_prog_javac_works = xno; then
|
||||
AC_MSG_ERROR([Cannot compile java source. $JAVAC does not work properly])
|
||||
fi
|
||||
if test x$ac_cv_prog_javac_works = x; then
|
||||
AX_PROG_JAVAC
|
||||
fi
|
||||
fi
|
||||
AC_CACHE_CHECK(if $JAVA works, ac_cv_prog_java_works, [
|
||||
JAVA_TEST=Test.java
|
||||
CLASS_TEST=Test.class
|
||||
TEST=Test
|
||||
changequote(, )dnl
|
||||
cat << \EOF > $JAVA_TEST
|
||||
/* [#]line __oline__ "configure" */
|
||||
public class Test {
|
||||
public static void main (String args[]) {
|
||||
System.exit (0);
|
||||
} }
|
||||
EOF
|
||||
changequote([, ])dnl
|
||||
if test x$ac_cv_prog_uudecode_base64 != xyes; then
|
||||
if AC_TRY_COMMAND($JAVAC $JAVACFLAGS $JAVA_TEST) && test -s $CLASS_TEST; then
|
||||
:
|
||||
else
|
||||
echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
|
||||
cat $JAVA_TEST >&AS_MESSAGE_LOG_FD
|
||||
AC_MSG_ERROR(The Java compiler $JAVAC failed (see config.log, check the CLASSPATH?))
|
||||
fi
|
||||
fi
|
||||
if AC_TRY_COMMAND($JAVA $JAVAFLAGS $TEST) >/dev/null 2>&1; then
|
||||
ac_cv_prog_java_works=yes
|
||||
else
|
||||
echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
|
||||
cat $JAVA_TEST >&AS_MESSAGE_LOG_FD
|
||||
AC_MSG_ERROR(The Java VM $JAVA failed (see config.log, check the CLASSPATH?))
|
||||
fi
|
||||
rm -fr $JAVA_TEST $CLASS_TEST Test.uue
|
||||
])
|
||||
AC_PROVIDE([$0])dnl
|
||||
]
|
||||
)
|
||||
@@ -1,79 +0,0 @@
|
||||
# ===========================================================================
|
||||
# http://www.gnu.org/software/autoconf-archive/ax_prog_javac.html
|
||||
# ===========================================================================
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
# AX_PROG_JAVAC
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# AX_PROG_JAVAC tests an existing Java compiler. It uses the environment
|
||||
# variable JAVAC then tests in sequence various common Java compilers. For
|
||||
# political reasons, it starts with the free ones.
|
||||
#
|
||||
# If you want to force a specific compiler:
|
||||
#
|
||||
# - at the configure.in level, set JAVAC=yourcompiler before calling
|
||||
# AX_PROG_JAVAC
|
||||
#
|
||||
# - at the configure level, setenv JAVAC
|
||||
#
|
||||
# You can use the JAVAC variable in your Makefile.in, with @JAVAC@.
|
||||
#
|
||||
# *Warning*: its success or failure can depend on a proper setting of the
|
||||
# CLASSPATH env. variable.
|
||||
#
|
||||
# TODO: allow to exclude compilers (rationale: most Java programs cannot
|
||||
# compile with some compilers like guavac).
|
||||
#
|
||||
# Note: This is part of the set of autoconf M4 macros for Java programs.
|
||||
# It is VERY IMPORTANT that you download the whole set, some macros depend
|
||||
# on other. Unfortunately, the autoconf archive does not support the
|
||||
# concept of set of macros, so I had to break it for submission. The
|
||||
# general documentation, as well as the sample configure.in, is included
|
||||
# in the AX_PROG_JAVA macro.
|
||||
#
|
||||
# LICENSE
|
||||
#
|
||||
# Copyright (c) 2008 Stephane Bortzmeyer <bortzmeyer@pasteur.fr>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the
|
||||
# Free Software Foundation; either version 2 of the License, or (at your
|
||||
# option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||
# Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# As a special exception, the respective Autoconf Macro's copyright owner
|
||||
# gives unlimited permission to copy, distribute and modify the configure
|
||||
# scripts that are the output of Autoconf when processing the Macro. You
|
||||
# need not follow the terms of the GNU General Public License when using
|
||||
# or distributing such scripts, even though portions of the text of the
|
||||
# Macro appear in them. The GNU General Public License (GPL) does govern
|
||||
# all other use of the material that constitutes the Autoconf Macro.
|
||||
#
|
||||
# This special exception to the GPL applies to versions of the Autoconf
|
||||
# Macro released by the Autoconf Archive. When you make and distribute a
|
||||
# modified version of the Autoconf Macro, you may extend this special
|
||||
# exception to the GPL to apply to your modified version as well.
|
||||
|
||||
#serial 6
|
||||
|
||||
AU_ALIAS([AC_PROG_JAVAC], [AX_PROG_JAVAC])
|
||||
AC_DEFUN([AX_PROG_JAVAC],[
|
||||
if test "x$JAVAPREFIX" = x; then
|
||||
test "x$JAVAC" = x && AC_CHECK_PROGS(JAVAC, "gcj -C" guavac jikes javac)
|
||||
else
|
||||
test "x$JAVAC" = x && AC_CHECK_PROGS(JAVAC, "gcj -C" guavac jikes javac, $JAVAPREFIX)
|
||||
fi
|
||||
test "x$JAVAC" = x && AC_MSG_ERROR([no acceptable Java compiler found in \$PATH])
|
||||
AX_PROG_JAVAC_WORKS
|
||||
AC_PROVIDE([$0])dnl
|
||||
])
|
||||
@@ -1,72 +0,0 @@
|
||||
# ===========================================================================
|
||||
# http://www.gnu.org/software/autoconf-archive/ax_prog_javac_works.html
|
||||
# ===========================================================================
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
# AX_PROG_JAVAC_WORKS
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# Internal use ONLY.
|
||||
#
|
||||
# Note: This is part of the set of autoconf M4 macros for Java programs.
|
||||
# It is VERY IMPORTANT that you download the whole set, some macros depend
|
||||
# on other. Unfortunately, the autoconf archive does not support the
|
||||
# concept of set of macros, so I had to break it for submission. The
|
||||
# general documentation, as well as the sample configure.in, is included
|
||||
# in the AX_PROG_JAVA macro.
|
||||
#
|
||||
# LICENSE
|
||||
#
|
||||
# Copyright (c) 2008 Stephane Bortzmeyer <bortzmeyer@pasteur.fr>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the
|
||||
# Free Software Foundation; either version 2 of the License, or (at your
|
||||
# option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||
# Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# As a special exception, the respective Autoconf Macro's copyright owner
|
||||
# gives unlimited permission to copy, distribute and modify the configure
|
||||
# scripts that are the output of Autoconf when processing the Macro. You
|
||||
# need not follow the terms of the GNU General Public License when using
|
||||
# or distributing such scripts, even though portions of the text of the
|
||||
# Macro appear in them. The GNU General Public License (GPL) does govern
|
||||
# all other use of the material that constitutes the Autoconf Macro.
|
||||
#
|
||||
# This special exception to the GPL applies to versions of the Autoconf
|
||||
# Macro released by the Autoconf Archive. When you make and distribute a
|
||||
# modified version of the Autoconf Macro, you may extend this special
|
||||
# exception to the GPL to apply to your modified version as well.
|
||||
|
||||
#serial 6
|
||||
|
||||
AU_ALIAS([AC_PROG_JAVAC_WORKS], [AX_PROG_JAVAC_WORKS])
|
||||
AC_DEFUN([AX_PROG_JAVAC_WORKS],[
|
||||
AC_CACHE_CHECK([if $JAVAC works], ac_cv_prog_javac_works, [
|
||||
JAVA_TEST=Test.java
|
||||
CLASS_TEST=Test.class
|
||||
cat << \EOF > $JAVA_TEST
|
||||
/* [#]line __oline__ "configure" */
|
||||
public class Test {
|
||||
}
|
||||
EOF
|
||||
if AC_TRY_COMMAND($JAVAC $JAVACFLAGS $JAVA_TEST) >/dev/null 2>&1; then
|
||||
ac_cv_prog_javac_works=yes
|
||||
else
|
||||
AC_MSG_ERROR([The Java compiler $JAVAC failed (see config.log, check the CLASSPATH?)])
|
||||
echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
|
||||
cat $JAVA_TEST >&AS_MESSAGE_LOG_FD
|
||||
fi
|
||||
rm -f $JAVA_TEST $CLASS_TEST
|
||||
])
|
||||
AC_PROVIDE([$0])dnl
|
||||
])
|
||||
@@ -1,52 +0,0 @@
|
||||
# ===========================================================================
|
||||
# http://www.gnu.org/software/autoconf-archive/ax_prog_javadoc.html
|
||||
# ===========================================================================
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
# AX_PROG_JAVADOC
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# AX_PROG_JAVADOC tests for an existing javadoc generator. It uses the
|
||||
# environment variable JAVADOC then tests in sequence various common
|
||||
# javadoc generator.
|
||||
#
|
||||
# If you want to force a specific compiler:
|
||||
#
|
||||
# - at the configure.in level, set JAVADOC=yourgenerator before calling
|
||||
# AX_PROG_JAVADOC
|
||||
#
|
||||
# - at the configure level, setenv JAVADOC
|
||||
#
|
||||
# You can use the JAVADOC variable in your Makefile.in, with @JAVADOC@.
|
||||
#
|
||||
# Note: This macro depends on the autoconf M4 macros for Java programs. It
|
||||
# is VERY IMPORTANT that you download that whole set, some macros depend
|
||||
# on other. Unfortunately, the autoconf archive does not support the
|
||||
# concept of set of macros, so I had to break it for submission.
|
||||
#
|
||||
# The general documentation of those macros, as well as the sample
|
||||
# configure.in, is included in the AX_PROG_JAVA macro.
|
||||
#
|
||||
# LICENSE
|
||||
#
|
||||
# Copyright (c) 2008 Egon Willighagen <e.willighagen@science.ru.nl>
|
||||
#
|
||||
# Copying and distribution of this file, with or without modification, are
|
||||
# permitted in any medium without royalty provided the copyright notice
|
||||
# and this notice are preserved. This file is offered as-is, without any
|
||||
# warranty.
|
||||
|
||||
#serial 7
|
||||
|
||||
AU_ALIAS([AC_PROG_JAVADOC], [AX_PROG_JAVADOC])
|
||||
AC_DEFUN([AX_PROG_JAVADOC],[
|
||||
if test "x$JAVAPREFIX" = x; then
|
||||
test "x$JAVADOC" = x && AC_CHECK_PROGS(JAVADOC, javadoc)
|
||||
else
|
||||
test "x$JAVADOC" = x && AC_CHECK_PROGS(JAVADOC, javadoc, $JAVAPREFIX)
|
||||
fi
|
||||
test "x$JAVADOC" = x && AC_MSG_ERROR([no acceptable javadoc generator found in \$PATH])
|
||||
AC_PROVIDE([$0])dnl
|
||||
])
|
||||
@@ -1,43 +0,0 @@
|
||||
# ===========================================================================
|
||||
# http://www.gnu.org/software/autoconf-archive/ax_prog_javah.html
|
||||
# ===========================================================================
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
# AX_PROG_JAVAH
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# AX_PROG_JAVAH tests the availability of the javah header generator and
|
||||
# looks for the jni.h header file. If available, JAVAH is set to the full
|
||||
# path of javah and CPPFLAGS is updated accordingly.
|
||||
#
|
||||
# LICENSE
|
||||
#
|
||||
# Copyright (c) 2008 Luc Maisonobe <luc@spaceroots.org>
|
||||
#
|
||||
# Copying and distribution of this file, with or without modification, are
|
||||
# permitted in any medium without royalty provided the copyright notice
|
||||
# and this notice are preserved. This file is offered as-is, without any
|
||||
# warranty.
|
||||
|
||||
#serial 5
|
||||
|
||||
AU_ALIAS([AC_PROG_JAVAH], [AX_PROG_JAVAH])
|
||||
AC_DEFUN([AX_PROG_JAVAH],[
|
||||
AC_REQUIRE([AC_CANONICAL_SYSTEM])dnl
|
||||
AC_REQUIRE([AC_PROG_CPP])dnl
|
||||
AC_PATH_PROG(JAVAH,javah)
|
||||
if test x"`eval 'echo $ac_cv_path_JAVAH'`" != x ; then
|
||||
AC_TRY_CPP([#include <jni.h>],,[
|
||||
ac_save_CPPFLAGS="$CPPFLAGS"
|
||||
changequote(, )dnl
|
||||
ac_dir=`echo $ac_cv_path_JAVAH | sed 's,\(.*\)/[^/]*/[^/]*$,\1/include,'`
|
||||
ac_machdep=`echo $build_os | sed 's,[-0-9].*,,' | sed 's,cygwin,win32,'`
|
||||
changequote([, ])dnl
|
||||
CPPFLAGS="$ac_save_CPPFLAGS -I$ac_dir -I$ac_dir/$ac_machdep"
|
||||
AC_TRY_CPP([#include <jni.h>],
|
||||
ac_save_CPPFLAGS="$CPPFLAGS",
|
||||
AC_MSG_WARN([unable to include <jni.h>]))
|
||||
CPPFLAGS="$ac_save_CPPFLAGS"])
|
||||
fi])
|
||||
@@ -1,55 +0,0 @@
|
||||
# ===========================================================================
|
||||
# http://www.gnu.org/software/autoconf-archive/ax_try_compile_java.html
|
||||
# ===========================================================================
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
# AX_TRY_COMPILE_JAVA
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# AX_TRY_COMPILE_JAVA attempt to compile user given source.
|
||||
#
|
||||
# *Warning*: its success or failure can depend on a proper setting of the
|
||||
# CLASSPATH env. variable.
|
||||
#
|
||||
# Note: This is part of the set of autoconf M4 macros for Java programs.
|
||||
# It is VERY IMPORTANT that you download the whole set, some macros depend
|
||||
# on other. Unfortunately, the autoconf archive does not support the
|
||||
# concept of set of macros, so I had to break it for submission. The
|
||||
# general documentation, as well as the sample configure.in, is included
|
||||
# in the AX_PROG_JAVA macro.
|
||||
#
|
||||
# LICENSE
|
||||
#
|
||||
# Copyright (c) 2008 Devin Weaver <ktohg@tritarget.com>
|
||||
#
|
||||
# Copying and distribution of this file, with or without modification, are
|
||||
# permitted in any medium without royalty provided the copyright notice
|
||||
# and this notice are preserved. This file is offered as-is, without any
|
||||
# warranty.
|
||||
|
||||
#serial 7
|
||||
|
||||
AU_ALIAS([AC_TRY_COMPILE_JAVA], [AX_TRY_COMPILE_JAVA])
|
||||
AC_DEFUN([AX_TRY_COMPILE_JAVA],[
|
||||
AC_REQUIRE([AX_PROG_JAVAC])dnl
|
||||
cat << \EOF > Test.java
|
||||
/* [#]line __oline__ "configure" */
|
||||
ifelse([$1], , , [import $1;])
|
||||
public class Test {
|
||||
[$2]
|
||||
}
|
||||
EOF
|
||||
if AC_TRY_COMMAND($JAVAC $JAVACFLAGS Test.java) && test -s Test.class
|
||||
then
|
||||
dnl Don't remove the temporary files here, so they can be examined.
|
||||
ifelse([$3], , :, [$3])
|
||||
else
|
||||
echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
|
||||
cat Test.java >&AS_MESSAGE_LOG_FD
|
||||
ifelse([$4], , , [ rm -fr Test*
|
||||
$4
|
||||
])dnl
|
||||
fi
|
||||
rm -fr Test*])
|
||||
@@ -1,56 +0,0 @@
|
||||
# ===========================================================================
|
||||
# http://www.gnu.org/software/autoconf-archive/ax_try_run_java.html
|
||||
# ===========================================================================
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
# AX_TRY_RUN_JAVA
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# AX_TRY_RUN_JAVA attempt to compile and run user given source.
|
||||
#
|
||||
# *Warning*: its success or failure can depend on a proper setting of the
|
||||
# CLASSPATH env. variable.
|
||||
#
|
||||
# Note: This is part of the set of autoconf M4 macros for Java programs.
|
||||
# It is VERY IMPORTANT that you download the whole set, some macros depend
|
||||
# on other. Unfortunately, the autoconf archive does not support the
|
||||
# concept of set of macros, so I had to break it for submission. The
|
||||
# general documentation, as well as the sample configure.in, is included
|
||||
# in the AX_PROG_JAVA macro.
|
||||
#
|
||||
# LICENSE
|
||||
#
|
||||
# Copyright (c) 2008 Devin Weaver <ktohg@tritarget.com>
|
||||
#
|
||||
# Copying and distribution of this file, with or without modification, are
|
||||
# permitted in any medium without royalty provided the copyright notice
|
||||
# and this notice are preserved. This file is offered as-is, without any
|
||||
# warranty.
|
||||
|
||||
#serial 1
|
||||
|
||||
AU_ALIAS([AC_TRY_RUN_JAVA], [AX_TRY_RUN_JAVA])
|
||||
AC_DEFUN([AX_TRY_RUN_JAVA],[
|
||||
AC_REQUIRE([AX_PROG_JAVAC])dnl
|
||||
AC_REQUIRE([AX_PROG_JAVA])dnl
|
||||
cat << \EOF > Test.java
|
||||
/* [#]line __oline__ "configure" */
|
||||
ifelse([$1], , , [include $1;])
|
||||
public class Test {
|
||||
[$2]
|
||||
}
|
||||
EOF
|
||||
if AC_TRY_COMMAND($JAVAC $JAVACFLAGS Test.java) && test -s Test.class && ($JAVA $JAVAFLAGS Test; exit) 2>/dev/null
|
||||
then
|
||||
dnl Don't remove the temporary files here, so they can be examined.
|
||||
ifelse([$3], , :, [$3])
|
||||
else
|
||||
echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
|
||||
cat Test.java >&AS_MESSAGE_LOG_FD
|
||||
ifelse([$4], , , [ rm -fr Test*
|
||||
$4
|
||||
])dnl
|
||||
fi
|
||||
rm -fr Test*])
|
||||
@@ -1,330 +0,0 @@
|
||||
#! /bin/sh
|
||||
# Common stub for a few missing GNU programs while installing.
|
||||
|
||||
scriptversion=2012-01-06.18; # UTC
|
||||
|
||||
# Copyright (C) 1996-2012 Free Software Foundation, Inc.
|
||||
# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
if test $# -eq 0; then
|
||||
echo 1>&2 "Try '$0 --help' for more information"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
run=:
|
||||
sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
|
||||
sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
|
||||
|
||||
# In the cases where this matters, 'missing' is being run in the
|
||||
# srcdir already.
|
||||
if test -f configure.ac; then
|
||||
configure_ac=configure.ac
|
||||
else
|
||||
configure_ac=configure.in
|
||||
fi
|
||||
|
||||
msg="missing on your system"
|
||||
|
||||
case $1 in
|
||||
--run)
|
||||
# Try to run requested program, and just exit if it succeeds.
|
||||
run=
|
||||
shift
|
||||
"$@" && exit 0
|
||||
# Exit code 63 means version mismatch. This often happens
|
||||
# when the user try to use an ancient version of a tool on
|
||||
# a file that requires a minimum version. In this case we
|
||||
# we should proceed has if the program had been absent, or
|
||||
# if --run hadn't been passed.
|
||||
if test $? = 63; then
|
||||
run=:
|
||||
msg="probably too old"
|
||||
fi
|
||||
;;
|
||||
|
||||
-h|--h|--he|--hel|--help)
|
||||
echo "\
|
||||
$0 [OPTION]... PROGRAM [ARGUMENT]...
|
||||
|
||||
Handle 'PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
|
||||
error status if there is no known handling for PROGRAM.
|
||||
|
||||
Options:
|
||||
-h, --help display this help and exit
|
||||
-v, --version output version information and exit
|
||||
--run try to run the given command, and emulate it if it fails
|
||||
|
||||
Supported PROGRAM values:
|
||||
aclocal touch file 'aclocal.m4'
|
||||
autoconf touch file 'configure'
|
||||
autoheader touch file 'config.h.in'
|
||||
autom4te touch the output file, or create a stub one
|
||||
automake touch all 'Makefile.in' files
|
||||
bison create 'y.tab.[ch]', if possible, from existing .[ch]
|
||||
flex create 'lex.yy.c', if possible, from existing .c
|
||||
help2man touch the output file
|
||||
lex create 'lex.yy.c', if possible, from existing .c
|
||||
makeinfo touch the output file
|
||||
yacc create 'y.tab.[ch]', if possible, from existing .[ch]
|
||||
|
||||
Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
|
||||
'g' are ignored when checking the name.
|
||||
|
||||
Send bug reports to <bug-automake@gnu.org>."
|
||||
exit $?
|
||||
;;
|
||||
|
||||
-v|--v|--ve|--ver|--vers|--versi|--versio|--version)
|
||||
echo "missing $scriptversion (GNU Automake)"
|
||||
exit $?
|
||||
;;
|
||||
|
||||
-*)
|
||||
echo 1>&2 "$0: Unknown '$1' option"
|
||||
echo 1>&2 "Try '$0 --help' for more information"
|
||||
exit 1
|
||||
;;
|
||||
|
||||
esac
|
||||
|
||||
# normalize program name to check for.
|
||||
program=`echo "$1" | sed '
|
||||
s/^gnu-//; t
|
||||
s/^gnu//; t
|
||||
s/^g//; t'`
|
||||
|
||||
# Now exit if we have it, but it failed. Also exit now if we
|
||||
# don't have it and --version was passed (most likely to detect
|
||||
# the program). This is about non-GNU programs, so use $1 not
|
||||
# $program.
|
||||
case $1 in
|
||||
lex*|yacc*)
|
||||
# Not GNU programs, they don't have --version.
|
||||
;;
|
||||
|
||||
*)
|
||||
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
|
||||
# We have it, but it failed.
|
||||
exit 1
|
||||
elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
|
||||
# Could not run --version or --help. This is probably someone
|
||||
# running '$TOOL --version' or '$TOOL --help' to check whether
|
||||
# $TOOL exists and not knowing $TOOL uses missing.
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
# If it does not exist, or fails to run (possibly an outdated version),
|
||||
# try to emulate it.
|
||||
case $program in
|
||||
aclocal*)
|
||||
echo 1>&2 "\
|
||||
WARNING: '$1' is $msg. You should only need it if
|
||||
you modified 'acinclude.m4' or '${configure_ac}'. You might want
|
||||
to install the Automake and Perl packages. Grab them from
|
||||
any GNU archive site."
|
||||
touch aclocal.m4
|
||||
;;
|
||||
|
||||
autoconf*)
|
||||
echo 1>&2 "\
|
||||
WARNING: '$1' is $msg. You should only need it if
|
||||
you modified '${configure_ac}'. You might want to install the
|
||||
Autoconf and GNU m4 packages. Grab them from any GNU
|
||||
archive site."
|
||||
touch configure
|
||||
;;
|
||||
|
||||
autoheader*)
|
||||
echo 1>&2 "\
|
||||
WARNING: '$1' is $msg. You should only need it if
|
||||
you modified 'acconfig.h' or '${configure_ac}'. You might want
|
||||
to install the Autoconf and GNU m4 packages. Grab them
|
||||
from any GNU archive site."
|
||||
files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
|
||||
test -z "$files" && files="config.h"
|
||||
touch_files=
|
||||
for f in $files; do
|
||||
case $f in
|
||||
*:*) touch_files="$touch_files "`echo "$f" |
|
||||
sed -e 's/^[^:]*://' -e 's/:.*//'`;;
|
||||
*) touch_files="$touch_files $f.in";;
|
||||
esac
|
||||
done
|
||||
touch $touch_files
|
||||
;;
|
||||
|
||||
automake*)
|
||||
echo 1>&2 "\
|
||||
WARNING: '$1' is $msg. You should only need it if
|
||||
you modified 'Makefile.am', 'acinclude.m4' or '${configure_ac}'.
|
||||
You might want to install the Automake and Perl packages.
|
||||
Grab them from any GNU archive site."
|
||||
find . -type f -name Makefile.am -print |
|
||||
sed 's/\.am$/.in/' |
|
||||
while read f; do touch "$f"; done
|
||||
;;
|
||||
|
||||
autom4te*)
|
||||
echo 1>&2 "\
|
||||
WARNING: '$1' is needed, but is $msg.
|
||||
You might have modified some files without having the
|
||||
proper tools for further handling them.
|
||||
You can get '$1' as part of Autoconf from any GNU
|
||||
archive site."
|
||||
|
||||
file=`echo "$*" | sed -n "$sed_output"`
|
||||
test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
|
||||
if test -f "$file"; then
|
||||
touch $file
|
||||
else
|
||||
test -z "$file" || exec >$file
|
||||
echo "#! /bin/sh"
|
||||
echo "# Created by GNU Automake missing as a replacement of"
|
||||
echo "# $ $@"
|
||||
echo "exit 0"
|
||||
chmod +x $file
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
|
||||
bison*|yacc*)
|
||||
echo 1>&2 "\
|
||||
WARNING: '$1' $msg. You should only need it if
|
||||
you modified a '.y' file. You may need the Bison package
|
||||
in order for those modifications to take effect. You can get
|
||||
Bison from any GNU archive site."
|
||||
rm -f y.tab.c y.tab.h
|
||||
if test $# -ne 1; then
|
||||
eval LASTARG=\${$#}
|
||||
case $LASTARG in
|
||||
*.y)
|
||||
SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
|
||||
if test -f "$SRCFILE"; then
|
||||
cp "$SRCFILE" y.tab.c
|
||||
fi
|
||||
SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
|
||||
if test -f "$SRCFILE"; then
|
||||
cp "$SRCFILE" y.tab.h
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
if test ! -f y.tab.h; then
|
||||
echo >y.tab.h
|
||||
fi
|
||||
if test ! -f y.tab.c; then
|
||||
echo 'main() { return 0; }' >y.tab.c
|
||||
fi
|
||||
;;
|
||||
|
||||
lex*|flex*)
|
||||
echo 1>&2 "\
|
||||
WARNING: '$1' is $msg. You should only need it if
|
||||
you modified a '.l' file. You may need the Flex package
|
||||
in order for those modifications to take effect. You can get
|
||||
Flex from any GNU archive site."
|
||||
rm -f lex.yy.c
|
||||
if test $# -ne 1; then
|
||||
eval LASTARG=\${$#}
|
||||
case $LASTARG in
|
||||
*.l)
|
||||
SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
|
||||
if test -f "$SRCFILE"; then
|
||||
cp "$SRCFILE" lex.yy.c
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
if test ! -f lex.yy.c; then
|
||||
echo 'main() { return 0; }' >lex.yy.c
|
||||
fi
|
||||
;;
|
||||
|
||||
help2man*)
|
||||
echo 1>&2 "\
|
||||
WARNING: '$1' is $msg. You should only need it if
|
||||
you modified a dependency of a manual page. You may need the
|
||||
Help2man package in order for those modifications to take
|
||||
effect. You can get Help2man from any GNU archive site."
|
||||
|
||||
file=`echo "$*" | sed -n "$sed_output"`
|
||||
test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
|
||||
if test -f "$file"; then
|
||||
touch $file
|
||||
else
|
||||
test -z "$file" || exec >$file
|
||||
echo ".ab help2man is required to generate this page"
|
||||
exit $?
|
||||
fi
|
||||
;;
|
||||
|
||||
makeinfo*)
|
||||
echo 1>&2 "\
|
||||
WARNING: '$1' is $msg. You should only need it if
|
||||
you modified a '.texi' or '.texinfo' file, or any other file
|
||||
indirectly affecting the aspect of the manual. The spurious
|
||||
call might also be the consequence of using a buggy 'make' (AIX,
|
||||
DU, IRIX). You might want to install the Texinfo package or
|
||||
the GNU make package. Grab either from any GNU archive site."
|
||||
# The file to touch is that specified with -o ...
|
||||
file=`echo "$*" | sed -n "$sed_output"`
|
||||
test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
|
||||
if test -z "$file"; then
|
||||
# ... or it is the one specified with @setfilename ...
|
||||
infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
|
||||
file=`sed -n '
|
||||
/^@setfilename/{
|
||||
s/.* \([^ ]*\) *$/\1/
|
||||
p
|
||||
q
|
||||
}' $infile`
|
||||
# ... or it is derived from the source name (dir/f.texi becomes f.info)
|
||||
test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
|
||||
fi
|
||||
# If the file does not exist, the user really needs makeinfo;
|
||||
# let's fail without touching anything.
|
||||
test -f $file || exit 1
|
||||
touch $file
|
||||
;;
|
||||
|
||||
*)
|
||||
echo 1>&2 "\
|
||||
WARNING: '$1' is needed, and is $msg.
|
||||
You might have modified some files without having the
|
||||
proper tools for further handling them. Check the 'README' file,
|
||||
it often tells you about the needed prerequisites for installing
|
||||
this package. You may also peek at any GNU archive site, in case
|
||||
some other package would contain this missing '$1' program."
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
||||
@@ -1,35 +0,0 @@
|
||||
|
||||
|
||||
lib_LTLIBRARIES = libffts.la
|
||||
|
||||
libffts_la_SOURCES = ffts.c ffts_nd.c ffts_real.c ffts_real_nd.c ffts_transpose.c ffts_trig.c ffts_static.c ffts_chirp_z.c
|
||||
libffts_la_SOURCES += codegen.h codegen_arm.h codegen_sse.h ffts.h ffts_nd.h ffts_real.h ffts_real_nd.h ffts_small.h ffts_static.h macros-alpha.h macros-altivec.h macros-neon.h macros-sse.h macros.h neon.h neon_float.h patterns.h types.h vfp.h
|
||||
|
||||
if DYNAMIC_DISABLED
|
||||
libffts_la_SOURCES += ffts_static.c
|
||||
else
|
||||
libffts_la_SOURCES += codegen.c
|
||||
endif
|
||||
|
||||
libffts_includedir=$(includedir)/ffts
|
||||
libffts_include_HEADERS = ../include/ffts.h
|
||||
|
||||
AM_CFLAGS = -I$(top_srcdir)/include -DAUTOTOOLS_BUILD=yes
|
||||
|
||||
if HAVE_VFP
|
||||
libffts_la_SOURCES += vfp.s
|
||||
else
|
||||
if HAVE_NEON
|
||||
|
||||
libffts_la_SOURCES += neon.s
|
||||
|
||||
if DYNAMIC_DISABLED
|
||||
libffts_la_SOURCES += neon_static_f.s neon_static_i.s
|
||||
endif
|
||||
|
||||
else
|
||||
if HAVE_SSE
|
||||
libffts_la_SOURCES += macros-sse.h
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
@@ -1,730 +0,0 @@
|
||||
# Makefile.in generated by automake 1.14 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
|
||||
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
|
||||
|
||||
VPATH = @srcdir@
|
||||
am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
|
||||
am__make_running_with_option = \
|
||||
case $${target_option-} in \
|
||||
?) ;; \
|
||||
*) echo "am__make_running_with_option: internal error: invalid" \
|
||||
"target option '$${target_option-}' specified" >&2; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
has_opt=no; \
|
||||
sane_makeflags=$$MAKEFLAGS; \
|
||||
if $(am__is_gnu_make); then \
|
||||
sane_makeflags=$$MFLAGS; \
|
||||
else \
|
||||
case $$MAKEFLAGS in \
|
||||
*\\[\ \ ]*) \
|
||||
bs=\\; \
|
||||
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
|
||||
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
|
||||
esac; \
|
||||
fi; \
|
||||
skip_next=no; \
|
||||
strip_trailopt () \
|
||||
{ \
|
||||
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
|
||||
}; \
|
||||
for flg in $$sane_makeflags; do \
|
||||
test $$skip_next = yes && { skip_next=no; continue; }; \
|
||||
case $$flg in \
|
||||
*=*|--*) continue;; \
|
||||
-*I) strip_trailopt 'I'; skip_next=yes;; \
|
||||
-*I?*) strip_trailopt 'I';; \
|
||||
-*O) strip_trailopt 'O'; skip_next=yes;; \
|
||||
-*O?*) strip_trailopt 'O';; \
|
||||
-*l) strip_trailopt 'l'; skip_next=yes;; \
|
||||
-*l?*) strip_trailopt 'l';; \
|
||||
-[dEDm]) skip_next=yes;; \
|
||||
-[JT]) skip_next=yes;; \
|
||||
esac; \
|
||||
case $$flg in \
|
||||
*$$target_option*) has_opt=yes; break;; \
|
||||
esac; \
|
||||
done; \
|
||||
test $$has_opt = yes
|
||||
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
|
||||
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkglibexecdir = $(libexecdir)/@PACKAGE@
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
@DYNAMIC_DISABLED_TRUE@am__append_1 = ffts_static.c
|
||||
@DYNAMIC_DISABLED_FALSE@am__append_2 = codegen.c
|
||||
@HAVE_VFP_TRUE@am__append_3 = vfp.s
|
||||
@HAVE_NEON_TRUE@@HAVE_VFP_FALSE@am__append_4 = neon.s
|
||||
@DYNAMIC_DISABLED_TRUE@@HAVE_NEON_TRUE@@HAVE_VFP_FALSE@am__append_5 = neon_static_f.s neon_static_i.s
|
||||
@HAVE_NEON_FALSE@@HAVE_SSE_TRUE@@HAVE_VFP_FALSE@am__append_6 = sse.s
|
||||
subdir = src
|
||||
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
|
||||
$(top_srcdir)/depcomp $(libffts_include_HEADERS)
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_classpath.m4 \
|
||||
$(top_srcdir)/m4/ax_check_java_home.m4 \
|
||||
$(top_srcdir)/m4/ax_java_options.m4 \
|
||||
$(top_srcdir)/m4/ax_jni_include_dir.m4 \
|
||||
$(top_srcdir)/m4/ax_prog_jar.m4 \
|
||||
$(top_srcdir)/m4/ax_prog_javac.m4 \
|
||||
$(top_srcdir)/m4/ax_prog_javac_works.m4 \
|
||||
$(top_srcdir)/configure.ac
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
CONFIG_CLEAN_VPATH_FILES =
|
||||
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
|
||||
am__vpath_adj = case $$p in \
|
||||
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
*) f=$$p;; \
|
||||
esac;
|
||||
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
|
||||
am__install_max = 40
|
||||
am__nobase_strip_setup = \
|
||||
srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
|
||||
am__nobase_strip = \
|
||||
for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
|
||||
am__nobase_list = $(am__nobase_strip_setup); \
|
||||
for p in $$list; do echo "$$p $$p"; done | \
|
||||
sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
|
||||
$(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
|
||||
if (++n[$$2] == $(am__install_max)) \
|
||||
{ print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
|
||||
END { for (dir in files) print dir, files[dir] }'
|
||||
am__base_list = \
|
||||
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
|
||||
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
|
||||
am__uninstall_files_from_dir = { \
|
||||
test -z "$$files" \
|
||||
|| { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
|
||||
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
|
||||
$(am__cd) "$$dir" && rm -f $$files; }; \
|
||||
}
|
||||
am__installdirs = "$(DESTDIR)$(libdir)" \
|
||||
"$(DESTDIR)$(libffts_includedir)"
|
||||
LTLIBRARIES = $(lib_LTLIBRARIES)
|
||||
libffts_la_LIBADD =
|
||||
am__libffts_la_SOURCES_DIST = ffts.c ffts_small.c ffts_nd.c \
|
||||
ffts_real.c ffts_real_nd.c patterns.c codegen.h codegen_arm.h \
|
||||
codegen_sse.h ffts.h ffts_nd.h ffts_real.h ffts_real_nd.h \
|
||||
ffts_small.h ffts_static.h macros-alpha.h macros-altivec.h \
|
||||
macros-neon.h macros-sse.h macros.h neon.h neon_float.h \
|
||||
patterns.h types.h vfp.h ffts_static.c codegen.c vfp.s neon.s \
|
||||
neon_static_f.s neon_static_i.s sse.s
|
||||
@DYNAMIC_DISABLED_TRUE@am__objects_1 = ffts_static.lo
|
||||
@DYNAMIC_DISABLED_FALSE@am__objects_2 = codegen.lo
|
||||
@HAVE_VFP_TRUE@am__objects_3 = vfp.lo
|
||||
@HAVE_NEON_TRUE@@HAVE_VFP_FALSE@am__objects_4 = neon.lo
|
||||
@DYNAMIC_DISABLED_TRUE@@HAVE_NEON_TRUE@@HAVE_VFP_FALSE@am__objects_5 = neon_static_f.lo \
|
||||
@DYNAMIC_DISABLED_TRUE@@HAVE_NEON_TRUE@@HAVE_VFP_FALSE@ neon_static_i.lo
|
||||
@HAVE_NEON_FALSE@@HAVE_SSE_TRUE@@HAVE_VFP_FALSE@am__objects_6 = \
|
||||
@HAVE_NEON_FALSE@@HAVE_SSE_TRUE@@HAVE_VFP_FALSE@ sse.lo
|
||||
am_libffts_la_OBJECTS = ffts.lo ffts_small.lo ffts_nd.lo ffts_real.lo \
|
||||
ffts_real_nd.lo patterns.lo $(am__objects_1) $(am__objects_2) \
|
||||
$(am__objects_3) $(am__objects_4) $(am__objects_5) \
|
||||
$(am__objects_6)
|
||||
libffts_la_OBJECTS = $(am_libffts_la_OBJECTS)
|
||||
AM_V_lt = $(am__v_lt_@AM_V@)
|
||||
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
|
||||
am__v_lt_0 = --silent
|
||||
am__v_lt_1 =
|
||||
AM_V_P = $(am__v_P_@AM_V@)
|
||||
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
|
||||
am__v_P_0 = false
|
||||
am__v_P_1 = :
|
||||
AM_V_GEN = $(am__v_GEN_@AM_V@)
|
||||
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
|
||||
am__v_GEN_0 = @echo " GEN " $@;
|
||||
am__v_GEN_1 =
|
||||
AM_V_at = $(am__v_at_@AM_V@)
|
||||
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
|
||||
am__v_at_0 = @
|
||||
am__v_at_1 =
|
||||
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
|
||||
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
||||
am__depfiles_maybe = depfiles
|
||||
am__mv = mv -f
|
||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
|
||||
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
|
||||
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
|
||||
$(AM_CFLAGS) $(CFLAGS)
|
||||
AM_V_CC = $(am__v_CC_@AM_V@)
|
||||
am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
|
||||
am__v_CC_0 = @echo " CC " $@;
|
||||
am__v_CC_1 =
|
||||
CCLD = $(CC)
|
||||
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
|
||||
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
|
||||
$(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||
AM_V_CCLD = $(am__v_CCLD_@AM_V@)
|
||||
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
|
||||
am__v_CCLD_0 = @echo " CCLD " $@;
|
||||
am__v_CCLD_1 =
|
||||
CCASCOMPILE = $(CCAS) $(AM_CCASFLAGS) $(CCASFLAGS)
|
||||
LTCCASCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \
|
||||
$(LIBTOOLFLAGS) --mode=compile $(CCAS) $(AM_CCASFLAGS) \
|
||||
$(CCASFLAGS)
|
||||
AM_V_CCAS = $(am__v_CCAS_@AM_V@)
|
||||
am__v_CCAS_ = $(am__v_CCAS_@AM_DEFAULT_V@)
|
||||
am__v_CCAS_0 = @echo " CCAS " $@;
|
||||
am__v_CCAS_1 =
|
||||
SOURCES = $(libffts_la_SOURCES)
|
||||
DIST_SOURCES = $(am__libffts_la_SOURCES_DIST)
|
||||
am__can_run_installinfo = \
|
||||
case $$AM_UPDATE_INFO_DIR in \
|
||||
n|no|NO) false;; \
|
||||
*) (install-info --version) >/dev/null 2>&1;; \
|
||||
esac
|
||||
HEADERS = $(libffts_include_HEADERS)
|
||||
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
|
||||
# Read a list of newline-separated strings from the standard input,
|
||||
# and print each of them once, without duplicates. Input order is
|
||||
# *not* preserved.
|
||||
am__uniquify_input = $(AWK) '\
|
||||
BEGIN { nonempty = 0; } \
|
||||
{ items[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in items) print i; }; } \
|
||||
'
|
||||
# Make sure the list of sources is unique. This is necessary because,
|
||||
# e.g., the same source file might be shared among _SOURCES variables
|
||||
# for different programs/libraries.
|
||||
am__define_uniq_tagged_files = \
|
||||
list='$(am__tagged_files)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | $(am__uniquify_input)`
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMTAR = @AMTAR@
|
||||
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
|
||||
AR = @AR@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCAS = @CCAS@
|
||||
CCASDEPMODE = @CCASDEPMODE@
|
||||
CCASFLAGS = @CCASFLAGS@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
CXXDEPMODE = @CXXDEPMODE@
|
||||
CXXFLAGS = @CXXFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
DLLTOOL = @DLLTOOL@
|
||||
DSYMUTIL = @DSYMUTIL@
|
||||
DUMPBIN = @DUMPBIN@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
FGREP = @FGREP@
|
||||
GREP = @GREP@
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
JAR = @JAR@
|
||||
JAVA = @JAVA@
|
||||
JAVAC = @JAVAC@
|
||||
JAVACFLAGS = @JAVACFLAGS@
|
||||
JAVAFLAGS = @JAVAFLAGS@
|
||||
JAVAPREFIX = @JAVAPREFIX@
|
||||
JAVA_PATH_NAME = @JAVA_PATH_NAME@
|
||||
JNI_CPPFLAGS = @JNI_CPPFLAGS@
|
||||
LD = @LD@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LIPO = @LIPO@
|
||||
LN_S = @LN_S@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
MANIFEST_TOOL = @MANIFEST_TOOL@
|
||||
MKDIR_P = @MKDIR_P@
|
||||
NM = @NM@
|
||||
NMEDIT = @NMEDIT@
|
||||
OBJDUMP = @OBJDUMP@
|
||||
OBJEXT = @OBJEXT@
|
||||
OTOOL = @OTOOL@
|
||||
OTOOL64 = @OTOOL64@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_URL = @PACKAGE_URL@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
RANLIB = @RANLIB@
|
||||
SED = @SED@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
VERSION = @VERSION@
|
||||
_ACJNI_JAVAC = @_ACJNI_JAVAC@
|
||||
abs_builddir = @abs_builddir@
|
||||
abs_srcdir = @abs_srcdir@
|
||||
abs_top_builddir = @abs_top_builddir@
|
||||
abs_top_srcdir = @abs_top_srcdir@
|
||||
ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
builddir = @builddir@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
srcdir = @srcdir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target_alias = @target_alias@
|
||||
top_build_prefix = @top_build_prefix@
|
||||
top_builddir = @top_builddir@
|
||||
top_srcdir = @top_srcdir@
|
||||
lib_LTLIBRARIES = libffts.la
|
||||
libffts_la_SOURCES = ffts.c ffts_small.c ffts_nd.c ffts_real.c \
|
||||
ffts_real_nd.c patterns.c codegen.h codegen_arm.h \
|
||||
codegen_sse.h ffts.h ffts_nd.h ffts_real.h ffts_real_nd.h \
|
||||
ffts_small.h ffts_static.h macros-alpha.h macros-altivec.h \
|
||||
macros-neon.h macros-sse.h macros.h neon.h neon_float.h \
|
||||
patterns.h types.h vfp.h $(am__append_1) $(am__append_2) \
|
||||
$(am__append_3) $(am__append_4) $(am__append_5) \
|
||||
$(am__append_6)
|
||||
libffts_includedir = $(includedir)/ffts
|
||||
libffts_include_HEADERS = ../include/ffts.h
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .lo .o .obj .s
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
|
||||
&& { if test -f $@; then exit 0; else break; fi; }; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \
|
||||
$(am__cd) $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu src/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(am__aclocal_m4_deps):
|
||||
|
||||
install-libLTLIBRARIES: $(lib_LTLIBRARIES)
|
||||
@$(NORMAL_INSTALL)
|
||||
@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
|
||||
list2=; for p in $$list; do \
|
||||
if test -f $$p; then \
|
||||
list2="$$list2 $$p"; \
|
||||
else :; fi; \
|
||||
done; \
|
||||
test -z "$$list2" || { \
|
||||
echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \
|
||||
$(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \
|
||||
echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
|
||||
$(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
|
||||
}
|
||||
|
||||
uninstall-libLTLIBRARIES:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
|
||||
for p in $$list; do \
|
||||
$(am__strip_dir) \
|
||||
echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
|
||||
$(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
|
||||
done
|
||||
|
||||
clean-libLTLIBRARIES:
|
||||
-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
|
||||
@list='$(lib_LTLIBRARIES)'; \
|
||||
locs=`for p in $$list; do echo $$p; done | \
|
||||
sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
|
||||
sort -u`; \
|
||||
test -z "$$locs" || { \
|
||||
echo rm -f $${locs}; \
|
||||
rm -f $${locs}; \
|
||||
}
|
||||
|
||||
libffts.la: $(libffts_la_OBJECTS) $(libffts_la_DEPENDENCIES) $(EXTRA_libffts_la_DEPENDENCIES)
|
||||
$(AM_V_CCLD)$(LINK) -rpath $(libdir) $(libffts_la_OBJECTS) $(libffts_la_LIBADD) $(LIBS)
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT)
|
||||
|
||||
distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/codegen.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ffts.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ffts_nd.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ffts_real.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ffts_real_nd.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ffts_small.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ffts_static.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/patterns.Plo@am__quote@
|
||||
|
||||
.c.o:
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
|
||||
|
||||
.c.obj:
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
|
||||
|
||||
.c.lo:
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
|
||||
|
||||
.s.o:
|
||||
$(AM_V_CCAS)$(CCASCOMPILE) -c -o $@ $<
|
||||
|
||||
.s.obj:
|
||||
$(AM_V_CCAS)$(CCASCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
|
||||
|
||||
.s.lo:
|
||||
$(AM_V_CCAS)$(LTCCASCOMPILE) -c -o $@ $<
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
install-libffts_includeHEADERS: $(libffts_include_HEADERS)
|
||||
@$(NORMAL_INSTALL)
|
||||
@list='$(libffts_include_HEADERS)'; test -n "$(libffts_includedir)" || list=; \
|
||||
if test -n "$$list"; then \
|
||||
echo " $(MKDIR_P) '$(DESTDIR)$(libffts_includedir)'"; \
|
||||
$(MKDIR_P) "$(DESTDIR)$(libffts_includedir)" || exit 1; \
|
||||
fi; \
|
||||
for p in $$list; do \
|
||||
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||
echo "$$d$$p"; \
|
||||
done | $(am__base_list) | \
|
||||
while read files; do \
|
||||
echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libffts_includedir)'"; \
|
||||
$(INSTALL_HEADER) $$files "$(DESTDIR)$(libffts_includedir)" || exit $$?; \
|
||||
done
|
||||
|
||||
uninstall-libffts_includeHEADERS:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(libffts_include_HEADERS)'; test -n "$(libffts_includedir)" || list=; \
|
||||
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
|
||||
dir='$(DESTDIR)$(libffts_includedir)'; $(am__uninstall_files_from_dir)
|
||||
|
||||
ID: $(am__tagged_files)
|
||||
$(am__define_uniq_tagged_files); mkid -fID $$unique
|
||||
tags: tags-am
|
||||
TAGS: tags
|
||||
|
||||
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
|
||||
set x; \
|
||||
here=`pwd`; \
|
||||
$(am__define_uniq_tagged_files); \
|
||||
shift; \
|
||||
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
if test $$# -gt 0; then \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
"$$@" $$unique; \
|
||||
else \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$unique; \
|
||||
fi; \
|
||||
fi
|
||||
ctags: ctags-am
|
||||
|
||||
CTAGS: ctags
|
||||
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
|
||||
$(am__define_uniq_tagged_files); \
|
||||
test -z "$(CTAGS_ARGS)$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& $(am__cd) $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) "$$here"
|
||||
cscopelist: cscopelist-am
|
||||
|
||||
cscopelist-am: $(am__tagged_files)
|
||||
list='$(am__tagged_files)'; \
|
||||
case "$(srcdir)" in \
|
||||
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
|
||||
*) sdir=$(subdir)/$(srcdir) ;; \
|
||||
esac; \
|
||||
for i in $$list; do \
|
||||
if test -f "$$i"; then \
|
||||
echo "$(subdir)/$$i"; \
|
||||
else \
|
||||
echo "$$sdir/$$i"; \
|
||||
fi; \
|
||||
done >> $(top_builddir)/cscope.files
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
list='$(DISTFILES)'; \
|
||||
dist_files=`for file in $$list; do echo $$file; done | \
|
||||
sed -e "s|^$$srcdirstrip/||;t" \
|
||||
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
|
||||
case $$dist_files in \
|
||||
*/*) $(MKDIR_P) `echo "$$dist_files" | \
|
||||
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
|
||||
sort -u` ;; \
|
||||
esac; \
|
||||
for file in $$dist_files; do \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test -d "$(distdir)/$$file"; then \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
|
||||
else \
|
||||
test -f "$(distdir)/$$file" \
|
||||
|| cp -p $$d/$$file "$(distdir)/$$file" \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(LTLIBRARIES) $(HEADERS)
|
||||
installdirs:
|
||||
for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(libffts_includedir)"; do \
|
||||
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
|
||||
done
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
uninstall: uninstall-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
if test -z '$(STRIP)'; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
install; \
|
||||
else \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
|
||||
fi
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
|
||||
mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -rf ./$(DEPDIR)
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-compile distclean-generic \
|
||||
distclean-tags
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
html-am:
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am: install-libffts_includeHEADERS
|
||||
|
||||
install-dvi: install-dvi-am
|
||||
|
||||
install-dvi-am:
|
||||
|
||||
install-exec-am: install-libLTLIBRARIES
|
||||
|
||||
install-html: install-html-am
|
||||
|
||||
install-html-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-info-am:
|
||||
|
||||
install-man:
|
||||
|
||||
install-pdf: install-pdf-am
|
||||
|
||||
install-pdf-am:
|
||||
|
||||
install-ps: install-ps-am
|
||||
|
||||
install-ps-am:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -rf ./$(DEPDIR)
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
|
||||
mostlyclean-libtool
|
||||
|
||||
pdf: pdf-am
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-libLTLIBRARIES \
|
||||
uninstall-libffts_includeHEADERS
|
||||
|
||||
.MAKE: install-am install-strip
|
||||
|
||||
.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
|
||||
clean-libLTLIBRARIES clean-libtool cscopelist-am ctags \
|
||||
ctags-am distclean distclean-compile distclean-generic \
|
||||
distclean-libtool distclean-tags distdir dvi dvi-am html \
|
||||
html-am info info-am install install-am install-data \
|
||||
install-data-am install-dvi install-dvi-am install-exec \
|
||||
install-exec-am install-html install-html-am install-info \
|
||||
install-info-am install-libLTLIBRARIES \
|
||||
install-libffts_includeHEADERS install-man install-pdf \
|
||||
install-pdf-am install-ps install-ps-am install-strip \
|
||||
installcheck installcheck-am installdirs maintainer-clean \
|
||||
maintainer-clean-generic mostlyclean mostlyclean-compile \
|
||||
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
|
||||
tags tags-am uninstall uninstall-am uninstall-libLTLIBRARIES \
|
||||
uninstall-libffts_includeHEADERS
|
||||
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
6
FFTS/Sources/FFTS/src/arch/.gitignore
vendored
6
FFTS/Sources/FFTS/src/arch/.gitignore
vendored
@@ -1,6 +0,0 @@
|
||||
/Makefile
|
||||
/Makefile.in
|
||||
/.deps
|
||||
/.libs
|
||||
/*.la
|
||||
/*.lo
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,21 +0,0 @@
|
||||
Copyright (c) 2001, 2002, 2003 Ximian, Inc and the individuals listed
|
||||
on the ChangeLog entries.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
@@ -1,11 +0,0 @@
|
||||
DIST_SUBDIRS = x86 ppc sparc arm arm64 s390x amd64 ia64 mips
|
||||
|
||||
AM_CPPFLAGS = $(GLIB_CFLAGS) -I$(top_srcdir)
|
||||
|
||||
if ARM
|
||||
# arm needs to build some stuff even in JIT mode
|
||||
SUBDIRS = $(arch_target)
|
||||
endif
|
||||
|
||||
EXTRA_DIST = ChangeLog
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
mono_arch
|
||||
=========
|
||||
|
||||
Part of Mono project, https://github.com/mono
|
||||
|
||||
These are C macros that are useful when generating native code on various platforms.
|
||||
This code is MIT X11 licensed.
|
||||
@@ -1 +0,0 @@
|
||||
/arm-wmmx.h -crlf
|
||||
15
FFTS/Sources/FFTS/src/arch/arm/.gitignore
vendored
15
FFTS/Sources/FFTS/src/arch/arm/.gitignore
vendored
@@ -1,15 +0,0 @@
|
||||
/Makefile
|
||||
/Makefile.in
|
||||
/.deps
|
||||
/.libs
|
||||
/*.o
|
||||
/*.la
|
||||
/*.lo
|
||||
/*.lib
|
||||
/*.obj
|
||||
/*.exe
|
||||
/*.dll
|
||||
/arm_dpimacros.h
|
||||
/arm_fpamacros.h
|
||||
/arm_vfpmacros.h
|
||||
/fixeol.sh
|
||||
@@ -1,27 +0,0 @@
|
||||
|
||||
AM_CPPFLAGS = $(GLIB_CFLAGS) -I$(top_srcdir)
|
||||
|
||||
noinst_LTLIBRARIES = libmonoarch-arm.la
|
||||
|
||||
BUILT_SOURCES = arm_dpimacros.h arm_vfpmacros.h
|
||||
|
||||
|
||||
libmonoarch_arm_la_SOURCES = $(BUILT_SOURCES) \
|
||||
arm-codegen.c \
|
||||
arm-codegen.h \
|
||||
arm-dis.c \
|
||||
arm-dis.h
|
||||
|
||||
arm_dpimacros.h: dpiops.sh mov_macros.th dpi_macros.th cmp_macros.th
|
||||
(cd $(srcdir); bash ./dpiops.sh) > $@t
|
||||
mv $@t $@
|
||||
|
||||
arm_vfpmacros.h: vfpops.sh vfpm_macros.th vfp_macros.th
|
||||
(cd $(srcdir); bash ./vfpops.sh) > $@t
|
||||
mv $@t $@
|
||||
|
||||
CLEANFILES = $(BUILT_SOURCES)
|
||||
|
||||
EXTRA_DIST = dpiops.sh mov_macros.th dpi_macros.th cmp_macros.th \
|
||||
vfpm_macros.th vfp_macros.th arm-vfp-codegen.h vfpops.sh
|
||||
|
||||
@@ -1,193 +0,0 @@
|
||||
/*
|
||||
* arm-codegen.c
|
||||
* Copyright (c) 2002 Sergey Chaban <serge@wildwestsoftware.com>
|
||||
*/
|
||||
|
||||
#include "arm-codegen.h"
|
||||
|
||||
|
||||
arminstr_t* arm_emit_std_prologue(arminstr_t* p, unsigned int local_size) {
|
||||
ARM_MOV_REG_REG(p, ARMREG_IP, ARMREG_SP);
|
||||
|
||||
/* save args */
|
||||
ARM_PUSH(p, (1 << ARMREG_A1)
|
||||
| (1 << ARMREG_A2)
|
||||
| (1 << ARMREG_A3)
|
||||
| (1 << ARMREG_A4));
|
||||
|
||||
ARM_PUSH(p, (1U << ARMREG_IP) | (1U << ARMREG_LR));
|
||||
|
||||
if (local_size != 0) {
|
||||
if ((local_size & (~0xFF)) == 0) {
|
||||
ARM_SUB_REG_IMM8(p, ARMREG_SP, ARMREG_SP, local_size);
|
||||
} else {
|
||||
/* TODO: optimize */
|
||||
p = arm_mov_reg_imm32(p, ARMREG_IP, local_size);
|
||||
ARM_SUB_REG_REG(p, ARMREG_SP, ARMREG_SP, ARMREG_IP);
|
||||
ARM_ADD_REG_IMM8(p, ARMREG_IP, ARMREG_IP, sizeof(armword_t));
|
||||
ARM_LDR_REG_REG(p, ARMREG_IP, ARMREG_SP, ARMREG_IP);
|
||||
}
|
||||
}
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
arminstr_t* arm_emit_std_epilogue(arminstr_t* p, unsigned int local_size, int pop_regs) {
|
||||
if (local_size != 0) {
|
||||
if ((local_size & (~0xFF)) == 0) {
|
||||
ARM_ADD_REG_IMM8(p, ARMREG_SP, ARMREG_SP, local_size);
|
||||
} else {
|
||||
/* TODO: optimize */
|
||||
p = arm_mov_reg_imm32(p, ARMREG_IP, local_size);
|
||||
ARM_ADD_REG_REG(p, ARMREG_SP, ARMREG_SP, ARMREG_IP);
|
||||
}
|
||||
}
|
||||
|
||||
ARM_POP_NWB(p, (1 << ARMREG_SP) | (1 << ARMREG_PC) | (pop_regs & 0x3FF));
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
|
||||
/* do not push A1-A4 */
|
||||
arminstr_t* arm_emit_lean_prologue(arminstr_t* p, unsigned int local_size, int push_regs) {
|
||||
ARM_MOV_REG_REG(p, ARMREG_IP, ARMREG_SP);
|
||||
/* push_regs upto R10 will be saved */
|
||||
ARM_PUSH(p, (1U << ARMREG_IP) | (1U << ARMREG_LR) | (push_regs & 0x3FF));
|
||||
|
||||
if (local_size != 0) {
|
||||
if ((local_size & (~0xFF)) == 0) {
|
||||
ARM_SUB_REG_IMM8(p, ARMREG_SP, ARMREG_SP, local_size);
|
||||
} else {
|
||||
/* TODO: optimize */
|
||||
p = arm_mov_reg_imm32(p, ARMREG_IP, local_size);
|
||||
ARM_SUB_REG_REG(p, ARMREG_SP, ARMREG_SP, ARMREG_IP);
|
||||
/* restore IP from stack */
|
||||
ARM_ADD_REG_IMM8(p, ARMREG_IP, ARMREG_IP, sizeof(armword_t));
|
||||
ARM_LDR_REG_REG(p, ARMREG_IP, ARMREG_SP, ARMREG_IP);
|
||||
}
|
||||
}
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
/* Bit scan forward. */
|
||||
int arm_bsf(armword_t val) {
|
||||
int i;
|
||||
armword_t mask;
|
||||
|
||||
if (val == 0) return 0;
|
||||
for (i=1, mask=1; (i <= 8 * sizeof(armword_t)) && ((val & mask) == 0); ++i, mask<<=1);
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
|
||||
int arm_is_power_of_2(armword_t val) {
|
||||
return ((val & (val-1)) == 0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* returns:
|
||||
* 1 - unable to represent
|
||||
* positive even number - MOV-representable
|
||||
* negative even number - MVN-representable
|
||||
*/
|
||||
int calc_arm_mov_const_shift(armword_t val) {
|
||||
armword_t mask;
|
||||
int res = 1, shift;
|
||||
|
||||
for (shift=0; shift < 32; shift+=2) {
|
||||
mask = ARM_SCALE(0xFF, shift);
|
||||
if ((val & (~mask)) == 0) {
|
||||
res = shift;
|
||||
break;
|
||||
}
|
||||
if (((~val) & (~mask)) == 0) {
|
||||
res = -shift - 2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
int is_arm_const(armword_t val) {
|
||||
int res;
|
||||
res = arm_is_power_of_2(val);
|
||||
if (!res) {
|
||||
res = calc_arm_mov_const_shift(val);
|
||||
res = !(res < 0 || res == 1);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
int arm_const_steps(armword_t val) {
|
||||
int shift, steps = 0;
|
||||
|
||||
while (val != 0) {
|
||||
shift = (arm_bsf(val) - 1) & (~1);
|
||||
val &= ~(0xFF << shift);
|
||||
++steps;
|
||||
}
|
||||
return steps;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* ARM cannot load arbitrary 32-bit constants directly into registers;
|
||||
* widely used work-around for this is to store constants into a
|
||||
* PC-addressable pool and use LDR instruction with PC-relative address
|
||||
* to load constant into register. Easiest way to implement this is to
|
||||
* embed constant inside a function with unconditional branch around it.
|
||||
* The above method is not used at the moment.
|
||||
* This routine always emits sequence of instructions to generate
|
||||
* requested constant. In the worst case it takes 4 instructions to
|
||||
* synthesize a constant - 1 MOV and 3 subsequent ORRs.
|
||||
*/
|
||||
arminstr_t* arm_mov_reg_imm32_cond(arminstr_t* p, int reg, armword_t imm32, int cond) {
|
||||
int mov_op;
|
||||
int step_op;
|
||||
int snip;
|
||||
int shift = calc_arm_mov_const_shift(imm32);
|
||||
|
||||
if ((shift & 0x80000001) != 1) {
|
||||
if (shift >= 0) {
|
||||
ARM_MOV_REG_IMM_COND(p, reg, imm32 >> ((32 - shift) & 31), shift, cond);
|
||||
} else {
|
||||
ARM_MVN_REG_IMM_COND(p, reg, (imm32 ^ (~0)) >> ((32 + 2 + shift) & 31), (-shift - 2), cond);
|
||||
}
|
||||
} else {
|
||||
mov_op = ARMOP_MOV;
|
||||
step_op = ARMOP_ORR;
|
||||
|
||||
if (arm_const_steps(imm32) > arm_const_steps(~imm32)) {
|
||||
mov_op = ARMOP_MVN;
|
||||
step_op = ARMOP_SUB;
|
||||
imm32 = ~imm32;
|
||||
}
|
||||
|
||||
shift = (arm_bsf(imm32) - 1) & (~1);
|
||||
snip = imm32 & (0xFF << shift);
|
||||
ARM_EMIT(p, ARM_DEF_DPI_IMM_COND((unsigned)snip >> shift, (32 - shift) >> 1, reg, 0, 0, mov_op, cond));
|
||||
|
||||
while ((imm32 ^= snip) != 0) {
|
||||
shift = (arm_bsf(imm32) - 1) & (~1);
|
||||
snip = imm32 & (0xFF << shift);
|
||||
ARM_EMIT(p, ARM_DEF_DPI_IMM_COND((unsigned)snip >> shift, (32 - shift) >> 1, reg, reg, 0, step_op, cond));
|
||||
}
|
||||
}
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
|
||||
arminstr_t* arm_mov_reg_imm32(arminstr_t* p, int reg, armword_t imm32) {
|
||||
return arm_mov_reg_imm32_cond(p, reg, imm32, ARMCOND_AL);
|
||||
}
|
||||
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,509 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002 Sergey Chaban <serge@wildwestsoftware.com>
|
||||
*/
|
||||
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
#include "arm-dis.h"
|
||||
#include "arm-codegen.h"
|
||||
|
||||
|
||||
static ARMDis* gdisasm = NULL;
|
||||
|
||||
static int use_reg_alias = 1;
|
||||
|
||||
const static char* cond[] = {
|
||||
"eq", "ne", "cs", "cc", "mi", "pl", "vs", "vc",
|
||||
"hi", "ls", "ge", "lt", "gt", "le", "", "nv"
|
||||
};
|
||||
|
||||
const static char* ops[] = {
|
||||
"and", "eor", "sub", "rsb", "add", "adc", "sbc", "rsc",
|
||||
"tst", "teq", "cmp", "cmn", "orr", "mov", "bic", "mvn"
|
||||
};
|
||||
|
||||
const static char* shift_types[] = {"lsl", "lsr", "asr", "ror"};
|
||||
|
||||
const static char* mul_ops[] = {
|
||||
"mul", "mla", "?", "?", "umull", "umlal", "smull", "smlal"
|
||||
};
|
||||
|
||||
const static char* reg_alias[] = {
|
||||
"a1", "a2", "a3", "a4",
|
||||
"r4", "r5", "r6", "r7", "r8", "r9", "r10",
|
||||
"fp", "ip", "sp", "lr", "pc"
|
||||
};
|
||||
|
||||
const static char* msr_fld[] = {"f", "c", "x", "?", "s"};
|
||||
|
||||
|
||||
/* private functions prototypes (to keep compiler happy) */
|
||||
void chk_out(ARMDis* dis);
|
||||
void dump_reg(ARMDis* dis, int reg);
|
||||
void dump_creg(ARMDis* dis, int creg);
|
||||
void dump_reglist(ARMDis* dis, int reg_list);
|
||||
void init_gdisasm(void);
|
||||
|
||||
void dump_br(ARMDis* dis, ARMInstr i);
|
||||
void dump_cdp(ARMDis* dis, ARMInstr i);
|
||||
void dump_cdt(ARMDis* dis, ARMInstr i);
|
||||
void dump_crt(ARMDis* dis, ARMInstr i);
|
||||
void dump_dpi(ARMDis* dis, ARMInstr i);
|
||||
void dump_hxfer(ARMDis* dis, ARMInstr i);
|
||||
void dump_mrs(ARMDis* dis, ARMInstr i);
|
||||
void dump_mrt(ARMDis* dis, ARMInstr i);
|
||||
void dump_msr(ARMDis* dis, ARMInstr i);
|
||||
void dump_mul(ARMDis* dis, ARMInstr i);
|
||||
void dump_swi(ARMDis* dis, ARMInstr i);
|
||||
void dump_swp(ARMDis* dis, ARMInstr i);
|
||||
void dump_wxfer(ARMDis* dis, ARMInstr i);
|
||||
void dump_clz(ARMDis* dis, ARMInstr i);
|
||||
|
||||
|
||||
/*
|
||||
void out(ARMDis* dis, const char* format, ...) {
|
||||
va_list arglist;
|
||||
va_start(arglist, format);
|
||||
fprintf(dis->dis_out, format, arglist);
|
||||
va_end(arglist);
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
void chk_out(ARMDis* dis) {
|
||||
if (dis != NULL && dis->dis_out == NULL) dis->dis_out = stdout;
|
||||
}
|
||||
|
||||
|
||||
void armdis_set_output(ARMDis* dis, FILE* f) {
|
||||
if (dis != NULL) {
|
||||
dis->dis_out = f;
|
||||
chk_out(dis);
|
||||
}
|
||||
}
|
||||
|
||||
FILE* armdis_get_output(ARMDis* dis) {
|
||||
return (dis != NULL ? dis->dis_out : NULL);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void dump_reg(ARMDis* dis, int reg) {
|
||||
reg &= 0xF;
|
||||
if (!use_reg_alias || (reg > 3 && reg < 11)) {
|
||||
fprintf(dis->dis_out, "r%d", reg);
|
||||
} else {
|
||||
fprintf(dis->dis_out, "%s", reg_alias[reg]);
|
||||
}
|
||||
}
|
||||
|
||||
void dump_creg(ARMDis* dis, int creg) {
|
||||
if (dis != NULL) {
|
||||
creg &= 0xF;
|
||||
fprintf(dis->dis_out, "c%d", creg);
|
||||
}
|
||||
}
|
||||
|
||||
void dump_reglist(ARMDis* dis, int reg_list) {
|
||||
int i = 0, j, n = 0;
|
||||
int m1 = 1, m2, rn;
|
||||
while (i < 16) {
|
||||
if ((reg_list & m1) != 0) {
|
||||
if (n != 0) fprintf(dis->dis_out, ", ");
|
||||
n++;
|
||||
dump_reg(dis, i);
|
||||
for (j = i+1, rn = 0, m2 = m1<<1; j < 16; ++j, m2<<=1) {
|
||||
if ((reg_list & m2) != 0) ++rn;
|
||||
else break;
|
||||
}
|
||||
i+=rn;
|
||||
if (rn > 1) {
|
||||
fprintf(dis->dis_out, "-");
|
||||
dump_reg(dis, i);
|
||||
} else if (rn == 1) {
|
||||
fprintf(dis->dis_out, ", ");
|
||||
dump_reg(dis, i);
|
||||
}
|
||||
m1<<=(rn+1);
|
||||
i++;
|
||||
} else {
|
||||
++i;
|
||||
m1<<=1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void dump_br(ARMDis* dis, ARMInstr i) {
|
||||
fprintf(dis->dis_out, "b%s%s\t%x\t; %p -> %#x",
|
||||
(i.br.link == 1) ? "l" : "",
|
||||
cond[i.br.cond], i.br.offset, dis->pi, (int)dis->pi + 4*2 + ((int)(i.br.offset << 8) >> 6));
|
||||
}
|
||||
|
||||
|
||||
void dump_dpi(ARMDis* dis, ARMInstr i) {
|
||||
fprintf(dis->dis_out, "%s%s", ops[i.dpi.all.opcode], cond[i.dpi.all.cond]);
|
||||
|
||||
if ((i.dpi.all.opcode < ARMOP_TST || i.dpi.all.opcode > ARMOP_CMN) && (i.dpi.all.s != 0)) {
|
||||
fprintf(dis->dis_out, "s");
|
||||
}
|
||||
|
||||
fprintf(dis->dis_out, "\t");
|
||||
|
||||
if ((i.dpi.all.opcode < ARMOP_TST) || (i.dpi.all.opcode > ARMOP_CMN)) {
|
||||
/* for comparison operations Rd is ignored */
|
||||
dump_reg(dis, i.dpi.all.rd);
|
||||
fprintf(dis->dis_out, ", ");
|
||||
}
|
||||
|
||||
if ((i.dpi.all.opcode != ARMOP_MOV) && (i.dpi.all.opcode != ARMOP_MVN)) {
|
||||
/* for MOV/MVN Rn is ignored */
|
||||
dump_reg(dis, i.dpi.all.rn);
|
||||
fprintf(dis->dis_out, ", ");
|
||||
}
|
||||
|
||||
if (i.dpi.all.type == 1) {
|
||||
/* immediate */
|
||||
if (i.dpi.op2_imm.rot != 0) {
|
||||
fprintf(dis->dis_out, "#%d, %d\t; 0x%x", i.dpi.op2_imm.imm, i.dpi.op2_imm.rot << 1,
|
||||
ARM_SCALE(i.dpi.op2_imm.imm, (i.dpi.op2_imm.rot << 1)) );
|
||||
} else {
|
||||
fprintf(dis->dis_out, "#%d\t; 0x%x", i.dpi.op2_imm.imm, i.dpi.op2_imm.imm);
|
||||
}
|
||||
} else {
|
||||
/* reg-reg */
|
||||
if (i.dpi.op2_reg.tag == 0) {
|
||||
/* op2 is reg shift by imm */
|
||||
dump_reg(dis, i.dpi.op2_reg_imm.r2.rm);
|
||||
if (i.dpi.op2_reg_imm.imm.shift != 0) {
|
||||
fprintf(dis->dis_out, " %s #%d", shift_types[i.dpi.op2_reg_imm.r2.type], i.dpi.op2_reg_imm.imm.shift);
|
||||
}
|
||||
} else {
|
||||
/* op2 is reg shift by reg */
|
||||
dump_reg(dis, i.dpi.op2_reg_reg.r2.rm);
|
||||
fprintf(dis->dis_out, " %s ", shift_types[i.dpi.op2_reg_reg.r2.type]);
|
||||
dump_reg(dis, i.dpi.op2_reg_reg.reg.rs);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void dump_wxfer(ARMDis* dis, ARMInstr i) {
|
||||
fprintf(dis->dis_out, "%s%s%s%s\t",
|
||||
(i.wxfer.all.ls == 0) ? "str" : "ldr",
|
||||
cond[i.generic.cond],
|
||||
(i.wxfer.all.b == 0) ? "" : "b",
|
||||
(i.wxfer.all.ls != 0 && i.wxfer.all.wb != 0) ? "t" : "");
|
||||
dump_reg(dis, i.wxfer.all.rd);
|
||||
fprintf(dis->dis_out, ", [");
|
||||
dump_reg(dis, i.wxfer.all.rn);
|
||||
fprintf(dis->dis_out, "%s, ", (i.wxfer.all.p == 0) ? "]" : "");
|
||||
|
||||
if (i.wxfer.all.type == 0) { /* imm */
|
||||
fprintf(dis->dis_out, "#%s%d", (i.wxfer.all.u == 0) ? "-" : "", i.wxfer.all.op2_imm);
|
||||
} else {
|
||||
dump_reg(dis, i.wxfer.op2_reg_imm.r2.rm);
|
||||
if (i.wxfer.op2_reg_imm.imm.shift != 0) {
|
||||
fprintf(dis->dis_out, " %s #%d", shift_types[i.wxfer.op2_reg_imm.r2.type], i.wxfer.op2_reg_imm.imm.shift);
|
||||
}
|
||||
}
|
||||
|
||||
if (i.wxfer.all.p != 0) {
|
||||
/* close pre-index instr, also check for write-back */
|
||||
fprintf(dis->dis_out, "]%s", (i.wxfer.all.wb != 0) ? "!" : "");
|
||||
}
|
||||
}
|
||||
|
||||
void dump_hxfer(ARMDis* dis, ARMInstr i) {
|
||||
fprintf(dis->dis_out, "%s%s%s%s\t",
|
||||
(i.hxfer.ls == 0) ? "str" : "ldr",
|
||||
cond[i.generic.cond],
|
||||
(i.hxfer.s != 0) ? "s" : "",
|
||||
(i.hxfer.h != 0) ? "h" : "b");
|
||||
dump_reg(dis, i.hxfer.rd);
|
||||
fprintf(dis->dis_out, ", [");
|
||||
dump_reg(dis, i.hxfer.rn);
|
||||
fprintf(dis->dis_out, "%s, ", (i.hxfer.p == 0) ? "]" : "");
|
||||
|
||||
if (i.hxfer.type != 0) { /* imm */
|
||||
fprintf(dis->dis_out, "#%s%d", (i.hxfer.u == 0) ? "-" : "", (i.hxfer.imm_hi << 4) | i.hxfer.rm);
|
||||
} else {
|
||||
dump_reg(dis, i.hxfer.rm);
|
||||
}
|
||||
|
||||
if (i.hxfer.p != 0) {
|
||||
/* close pre-index instr, also check for write-back */
|
||||
fprintf(dis->dis_out, "]%s", (i.hxfer.wb != 0) ? "!" : "");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void dump_mrt(ARMDis* dis, ARMInstr i) {
|
||||
fprintf(dis->dis_out, "%s%s%s%s\t", (i.mrt.ls == 0) ? "stm" : "ldm", cond[i.mrt.cond],
|
||||
(i.mrt.u == 0) ? "d" : "i", (i.mrt.p == 0) ? "a" : "b");
|
||||
dump_reg(dis, i.mrt.rn);
|
||||
fprintf(dis->dis_out, "%s, {", (i.mrt.wb != 0) ? "!" : "");
|
||||
dump_reglist(dis, i.mrt.reg_list);
|
||||
fprintf(dis->dis_out, "}");
|
||||
}
|
||||
|
||||
|
||||
void dump_swp(ARMDis* dis, ARMInstr i) {
|
||||
fprintf(dis->dis_out, "swp%s%s ", cond[i.swp.cond], (i.swp.b != 0) ? "b" : "");
|
||||
dump_reg(dis, i.swp.rd);
|
||||
fprintf(dis->dis_out, ", ");
|
||||
dump_reg(dis, i.swp.rm);
|
||||
fprintf(dis->dis_out, ", [");
|
||||
dump_reg(dis, i.swp.rn);
|
||||
fprintf(dis->dis_out, "]");
|
||||
}
|
||||
|
||||
|
||||
void dump_mul(ARMDis* dis, ARMInstr i) {
|
||||
fprintf(dis->dis_out, "%s%s%s\t", mul_ops[i.mul.opcode], cond[i.mul.cond], (i.mul.s != 0) ? "s" : "");
|
||||
switch (i.mul.opcode) {
|
||||
case ARMOP_MUL:
|
||||
dump_reg(dis, i.mul.rd);
|
||||
fprintf(dis->dis_out, ", ");
|
||||
dump_reg(dis, i.mul.rm);
|
||||
fprintf(dis->dis_out, ", ");
|
||||
dump_reg(dis, i.mul.rs);
|
||||
break;
|
||||
case ARMOP_MLA:
|
||||
dump_reg(dis, i.mul.rd);
|
||||
fprintf(dis->dis_out, ", ");
|
||||
dump_reg(dis, i.mul.rm);
|
||||
fprintf(dis->dis_out, ", ");
|
||||
dump_reg(dis, i.mul.rs);
|
||||
fprintf(dis->dis_out, ", ");
|
||||
dump_reg(dis, i.mul.rn);
|
||||
break;
|
||||
case ARMOP_UMULL:
|
||||
case ARMOP_UMLAL:
|
||||
case ARMOP_SMULL:
|
||||
case ARMOP_SMLAL:
|
||||
dump_reg(dis, i.mul.rd);
|
||||
fprintf(dis->dis_out, ", ");
|
||||
dump_reg(dis, i.mul.rn);
|
||||
fprintf(dis->dis_out, ", ");
|
||||
dump_reg(dis, i.mul.rm);
|
||||
fprintf(dis->dis_out, ", ");
|
||||
dump_reg(dis, i.mul.rs);
|
||||
break;
|
||||
default:
|
||||
fprintf(dis->dis_out, "DCD 0x%x\t; <unknown>", i.raw);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void dump_cdp(ARMDis* dis, ARMInstr i) {
|
||||
fprintf(dis->dis_out, "cdp%s\tp%d, %d, ", cond[i.generic.cond], i.cdp.cpn, i.cdp.op);
|
||||
dump_creg(dis, i.cdp.crd);
|
||||
fprintf(dis->dis_out, ", ");
|
||||
dump_creg(dis, i.cdp.crn);
|
||||
fprintf(dis->dis_out, ", ");
|
||||
dump_creg(dis, i.cdp.crm);
|
||||
|
||||
if (i.cdp.op2 != 0) {
|
||||
fprintf(dis->dis_out, ", %d", i.cdp.op2);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void dump_cdt(ARMDis* dis, ARMInstr i) {
|
||||
fprintf(dis->dis_out, "%s%s%s\tp%d, ", (i.cdt.ls == 0) ? "stc" : "ldc",
|
||||
cond[i.generic.cond], (i.cdt.n != 0) ? "l" : "", i.cdt.cpn);
|
||||
dump_creg(dis, i.cdt.crd);
|
||||
fprintf(dis->dis_out, ", ");
|
||||
dump_reg(dis, i.cdt.rn);
|
||||
|
||||
if (i.cdt.p == 0) {
|
||||
fprintf(dis->dis_out, "]");
|
||||
}
|
||||
|
||||
if (i.cdt.offs != 0) {
|
||||
fprintf(dis->dis_out, ", #%d", i.cdt.offs);
|
||||
}
|
||||
|
||||
if (i.cdt.p != 0) {
|
||||
fprintf(dis->dis_out, "]%s", (i.cdt.wb != 0) ? "!" : "");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void dump_crt(ARMDis* dis, ARMInstr i) {
|
||||
fprintf(dis->dis_out, "%s%s\tp%d, %d, ", (i.crt.ls == 0) ? "mrc" : "mcr",
|
||||
cond[i.generic.cond], i.crt.cpn, i.crt.op1);
|
||||
dump_reg(dis, i.crt.rd);
|
||||
fprintf(dis->dis_out, ", ");
|
||||
dump_creg(dis, i.crt.crn);
|
||||
fprintf(dis->dis_out, ", ");
|
||||
dump_creg(dis, i.crt.crm);
|
||||
|
||||
if (i.crt.op2 != 0) {
|
||||
fprintf(dis->dis_out, ", %d", i.crt.op2);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void dump_msr(ARMDis* dis, ARMInstr i) {
|
||||
fprintf(dis->dis_out, "msr%s\t%spsr_, ", cond[i.generic.cond],
|
||||
(i.msr.all.sel == 0) ? "s" : "c");
|
||||
if (i.msr.all.type == 0) {
|
||||
/* reg */
|
||||
fprintf(dis->dis_out, "%s, ", msr_fld[i.msr.all.fld]);
|
||||
dump_reg(dis, i.msr.all.rm);
|
||||
} else {
|
||||
/* imm */
|
||||
fprintf(dis->dis_out, "f, #%d", i.msr.op2_imm.imm << i.msr.op2_imm.rot);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void dump_mrs(ARMDis* dis, ARMInstr i) {
|
||||
fprintf(dis->dis_out, "mrs%s\t", cond[i.generic.cond]);
|
||||
dump_reg(dis, i.mrs.rd);
|
||||
fprintf(dis->dis_out, ", %spsr", (i.mrs.sel == 0) ? "s" : "c");
|
||||
}
|
||||
|
||||
|
||||
void dump_swi(ARMDis* dis, ARMInstr i) {
|
||||
fprintf(dis->dis_out, "swi%s\t%d", cond[i.generic.cond], i.swi.num);
|
||||
}
|
||||
|
||||
|
||||
void dump_clz(ARMDis* dis, ARMInstr i) {
|
||||
fprintf(dis->dis_out, "clz\t");
|
||||
dump_reg(dis, i.clz.rd);
|
||||
fprintf(dis->dis_out, ", ");
|
||||
dump_reg(dis, i.clz.rm);
|
||||
fprintf(dis->dis_out, "\n");
|
||||
}
|
||||
|
||||
|
||||
|
||||
void armdis_decode(ARMDis* dis, void* p, int size) {
|
||||
int i;
|
||||
arminstr_t* pi = (arminstr_t*)p;
|
||||
ARMInstr instr;
|
||||
|
||||
if (dis == NULL) return;
|
||||
|
||||
chk_out(dis);
|
||||
|
||||
size/=sizeof(arminstr_t);
|
||||
|
||||
for (i=0; i<size; ++i) {
|
||||
fprintf(dis->dis_out, "%p:\t%08x\t", pi, *pi);
|
||||
dis->pi = pi;
|
||||
instr.raw = *pi++;
|
||||
|
||||
if ((instr.raw & ARM_BR_MASK) == ARM_BR_TAG) {
|
||||
dump_br(dis, instr);
|
||||
} else if ((instr.raw & ARM_SWP_MASK) == ARM_SWP_TAG) {
|
||||
dump_swp(dis, instr);
|
||||
} else if ((instr.raw & ARM_MUL_MASK) == ARM_MUL_TAG) {
|
||||
dump_mul(dis, instr);
|
||||
} else if ((instr.raw & ARM_CLZ_MASK) == ARM_CLZ_TAG) {
|
||||
dump_clz(dis, instr);
|
||||
} else if ((instr.raw & ARM_WXFER_MASK) == ARM_WXFER_TAG) {
|
||||
dump_wxfer(dis, instr);
|
||||
} else if ((instr.raw & ARM_HXFER_MASK) == ARM_HXFER_TAG) {
|
||||
dump_hxfer(dis, instr);
|
||||
} else if ((instr.raw & ARM_DPI_MASK) == ARM_DPI_TAG) {
|
||||
dump_dpi(dis, instr);
|
||||
} else if ((instr.raw & ARM_MRT_MASK) == ARM_MRT_TAG) {
|
||||
dump_mrt(dis, instr);
|
||||
} else if ((instr.raw & ARM_CDP_MASK) == ARM_CDP_TAG) {
|
||||
dump_cdp(dis, instr);
|
||||
} else if ((instr.raw & ARM_CDT_MASK) == ARM_CDT_TAG) {
|
||||
dump_cdt(dis, instr);
|
||||
} else if ((instr.raw & ARM_CRT_MASK) == ARM_CRT_TAG) {
|
||||
dump_crt(dis, instr);
|
||||
} else if ((instr.raw & ARM_MSR_MASK) == ARM_MSR_TAG) {
|
||||
dump_msr(dis, instr);
|
||||
} else if ((instr.raw & ARM_MRS_MASK) == ARM_MRS_TAG) {
|
||||
dump_mrs(dis, instr);
|
||||
} else if ((instr.raw & ARM_SWI_MASK) == ARM_SWI_TAG) {
|
||||
dump_swi(dis, instr);
|
||||
} else {
|
||||
fprintf(dis->dis_out, "DCD 0x%x\t; <unknown>", instr.raw);
|
||||
}
|
||||
|
||||
fprintf(dis->dis_out, "\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void armdis_open(ARMDis* dis, const char* dump_name) {
|
||||
if (dis != NULL && dump_name != NULL) {
|
||||
armdis_set_output(dis, fopen(dump_name, "w"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void armdis_close(ARMDis* dis) {
|
||||
if (dis->dis_out != NULL && dis->dis_out != stdout && dis->dis_out != stderr) {
|
||||
fclose(dis->dis_out);
|
||||
dis->dis_out = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void armdis_dump(ARMDis* dis, const char* dump_name, void* p, int size) {
|
||||
armdis_open(dis, dump_name);
|
||||
armdis_decode(dis, p, size);
|
||||
armdis_close(dis);
|
||||
}
|
||||
|
||||
|
||||
void armdis_init(ARMDis* dis) {
|
||||
if (dis != NULL) {
|
||||
/* set to stdout */
|
||||
armdis_set_output(dis, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void init_gdisasm() {
|
||||
if (gdisasm == NULL) {
|
||||
gdisasm = (ARMDis*)malloc(sizeof(ARMDis));
|
||||
armdis_init(gdisasm);
|
||||
}
|
||||
}
|
||||
|
||||
void _armdis_set_output(FILE* f) {
|
||||
init_gdisasm();
|
||||
armdis_set_output(gdisasm, f);
|
||||
}
|
||||
|
||||
FILE* _armdis_get_output() {
|
||||
init_gdisasm();
|
||||
return armdis_get_output(gdisasm);
|
||||
}
|
||||
|
||||
void _armdis_decode(void* p, int size) {
|
||||
init_gdisasm();
|
||||
armdis_decode(gdisasm, p, size);
|
||||
}
|
||||
|
||||
void _armdis_open(const char* dump_name) {
|
||||
init_gdisasm();
|
||||
armdis_open(gdisasm, dump_name);
|
||||
}
|
||||
|
||||
void _armdis_close() {
|
||||
init_gdisasm();
|
||||
armdis_close(gdisasm);
|
||||
}
|
||||
|
||||
void _armdis_dump(const char* dump_name, void* p, int size) {
|
||||
init_gdisasm();
|
||||
armdis_dump(gdisasm, dump_name, p, size);
|
||||
}
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002 Sergey Chaban <serge@wildwestsoftware.com>
|
||||
*/
|
||||
|
||||
#ifndef ARM_DIS
|
||||
#define ARM_DIS
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct _ARMDis {
|
||||
FILE* dis_out;
|
||||
void* pi;
|
||||
} ARMDis;
|
||||
|
||||
|
||||
void _armdis_set_output(FILE* f);
|
||||
FILE* _armdis_get_output(void);
|
||||
void _armdis_decode(void* p, int size);
|
||||
void _armdis_open(const char* dump_name);
|
||||
void _armdis_close(void);
|
||||
void _armdis_dump(const char* dump_name, void* p, int size);
|
||||
|
||||
|
||||
void armdis_init(ARMDis* dis);
|
||||
void armdis_set_output(ARMDis* dis, FILE* f);
|
||||
FILE* armdis_get_output(ARMDis* dis);
|
||||
void armdis_decode(ARMDis* dis, void* p, int size);
|
||||
void armdis_open(ARMDis* dis, const char* dump_name);
|
||||
void armdis_close(ARMDis* dis);
|
||||
void armdis_dump(ARMDis* dis, const char* dump_name, void* p, int size);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* ARM_DIS */
|
||||
@@ -1,247 +0,0 @@
|
||||
//
|
||||
// Copyright 2011 Xamarin Inc
|
||||
//
|
||||
|
||||
#ifndef __MONO_ARM_VFP_CODEGEN_H__
|
||||
#define __MONO_ARM_VFP_CODEGEN_H__
|
||||
|
||||
#include "arm-codegen.h"
|
||||
|
||||
enum {
|
||||
/* VFP registers */
|
||||
ARM_VFP_F0,
|
||||
ARM_VFP_F1,
|
||||
ARM_VFP_F2,
|
||||
ARM_VFP_F3,
|
||||
ARM_VFP_F4,
|
||||
ARM_VFP_F5,
|
||||
ARM_VFP_F6,
|
||||
ARM_VFP_F7,
|
||||
ARM_VFP_F8,
|
||||
ARM_VFP_F9,
|
||||
ARM_VFP_F10,
|
||||
ARM_VFP_F11,
|
||||
ARM_VFP_F12,
|
||||
ARM_VFP_F13,
|
||||
ARM_VFP_F14,
|
||||
ARM_VFP_F15,
|
||||
ARM_VFP_F16,
|
||||
ARM_VFP_F17,
|
||||
ARM_VFP_F18,
|
||||
ARM_VFP_F19,
|
||||
ARM_VFP_F20,
|
||||
ARM_VFP_F21,
|
||||
ARM_VFP_F22,
|
||||
ARM_VFP_F23,
|
||||
ARM_VFP_F24,
|
||||
ARM_VFP_F25,
|
||||
ARM_VFP_F26,
|
||||
ARM_VFP_F27,
|
||||
ARM_VFP_F28,
|
||||
ARM_VFP_F29,
|
||||
ARM_VFP_F30,
|
||||
ARM_VFP_F31,
|
||||
|
||||
ARM_VFP_D0 = ARM_VFP_F0,
|
||||
ARM_VFP_D1 = ARM_VFP_F2,
|
||||
ARM_VFP_D2 = ARM_VFP_F4,
|
||||
ARM_VFP_D3 = ARM_VFP_F6,
|
||||
ARM_VFP_D4 = ARM_VFP_F8,
|
||||
ARM_VFP_D5 = ARM_VFP_F10,
|
||||
ARM_VFP_D6 = ARM_VFP_F12,
|
||||
ARM_VFP_D7 = ARM_VFP_F14,
|
||||
ARM_VFP_D8 = ARM_VFP_F16,
|
||||
ARM_VFP_D9 = ARM_VFP_F18,
|
||||
ARM_VFP_D10 = ARM_VFP_F20,
|
||||
ARM_VFP_D11 = ARM_VFP_F22,
|
||||
ARM_VFP_D12 = ARM_VFP_F24,
|
||||
ARM_VFP_D13 = ARM_VFP_F26,
|
||||
ARM_VFP_D14 = ARM_VFP_F28,
|
||||
ARM_VFP_D15 = ARM_VFP_F30,
|
||||
|
||||
ARM_VFP_COPROC_SINGLE = 10,
|
||||
ARM_VFP_COPROC_DOUBLE = 11,
|
||||
|
||||
#define ARM_VFP_OP(p,q,r,s) (((p) << 23) | ((q) << 21) | ((r) << 20) | ((s) << 6))
|
||||
#define ARM_VFP_OP2(Fn,N) (ARM_VFP_OP (1,1,1,1) | ((Fn) << 16) | ((N) << 7))
|
||||
|
||||
ARM_VFP_MUL = ARM_VFP_OP (0,1,0,0),
|
||||
ARM_VFP_NMUL = ARM_VFP_OP (0,1,0,1),
|
||||
ARM_VFP_ADD = ARM_VFP_OP (0,1,1,0),
|
||||
ARM_VFP_SUB = ARM_VFP_OP (0,1,1,1),
|
||||
ARM_VFP_DIV = ARM_VFP_OP (1,0,0,0),
|
||||
|
||||
ARM_VFP_CPY = ARM_VFP_OP2 (0,0),
|
||||
ARM_VFP_ABS = ARM_VFP_OP2 (0,1),
|
||||
ARM_VFP_NEG = ARM_VFP_OP2 (1,0),
|
||||
ARM_VFP_SQRT = ARM_VFP_OP2 (1,1),
|
||||
ARM_VFP_CMP = ARM_VFP_OP2 (4,0),
|
||||
ARM_VFP_CMPE = ARM_VFP_OP2 (4,1),
|
||||
ARM_VFP_CMPZ = ARM_VFP_OP2 (5,0),
|
||||
ARM_VFP_CMPEZ = ARM_VFP_OP2 (5,1),
|
||||
ARM_VFP_CVT = ARM_VFP_OP2 (7,1),
|
||||
ARM_VFP_UITO = ARM_VFP_OP2 (8,0),
|
||||
ARM_VFP_SITO = ARM_VFP_OP2 (8,1),
|
||||
ARM_VFP_TOUI = ARM_VFP_OP2 (12,0),
|
||||
ARM_VFP_TOSI = ARM_VFP_OP2 (13,0),
|
||||
ARM_VFP_TOUIZ = ARM_VFP_OP2 (12,1),
|
||||
ARM_VFP_TOSIZ = ARM_VFP_OP2 (13,1),
|
||||
|
||||
ARM_VFP_SID = 0,
|
||||
ARM_VFP_SCR = 1 << 1,
|
||||
ARM_VFP_EXC = 8 << 1
|
||||
};
|
||||
|
||||
#define ARM_DEF_VFP_DYADIC(cond,cp,op,Fd,Fn,Fm) \
|
||||
(14 << 24) | \
|
||||
((cp) << 8) | \
|
||||
(op) | \
|
||||
(((Fd) >> 1) << 12) | \
|
||||
(((Fd) & 1) << 22) | \
|
||||
(((Fn) >> 1) << 16) | \
|
||||
(((Fn) & 1) << 7) | \
|
||||
(((Fm) >> 1) << 0) | \
|
||||
(((Fm) & 1) << 5) | \
|
||||
ARM_DEF_COND(cond)
|
||||
|
||||
#define ARM_DEF_VFP_MONADIC(cond,cp,op,Fd,Fm) \
|
||||
(14 << 24) | \
|
||||
((cp) << 8) | \
|
||||
(op) | \
|
||||
(((Fd) >> 1) << 12) | \
|
||||
(((Fd) & 1) << 22) | \
|
||||
(((Fm) >> 1) << 0) | \
|
||||
(((Fm) & 1) << 5) | \
|
||||
ARM_DEF_COND(cond)
|
||||
|
||||
#define ARM_DEF_VFP_LSF(cond,cp,post,ls,wback,basereg,Fd,offset) \
|
||||
((offset) >= 0? (offset)>>2: -(offset)>>2) | \
|
||||
(6 << 25) | \
|
||||
((cp) << 8) | \
|
||||
(((Fd) >> 1) << 12) | \
|
||||
(((Fd) & 1) << 22) | \
|
||||
((basereg) << 16) | \
|
||||
((ls) << 20) | \
|
||||
((wback) << 21) | \
|
||||
(((offset) >= 0) << 23) | \
|
||||
((wback) << 21) | \
|
||||
((post) << 24) | \
|
||||
ARM_DEF_COND(cond)
|
||||
|
||||
#define ARM_DEF_VFP_CPT(cond,cp,op,L,Fn,Rd) \
|
||||
(14 << 24) | \
|
||||
(1 << 4) | \
|
||||
((cp) << 8) | \
|
||||
((op) << 21) | \
|
||||
((L) << 20) | \
|
||||
((Rd) << 12) | \
|
||||
(((Fn) >> 1) << 16) | \
|
||||
(((Fn) & 1) << 7) | \
|
||||
ARM_DEF_COND(cond)
|
||||
|
||||
/* FP load and stores */
|
||||
#define ARM_FLDS_COND(p,freg,base,offset,cond) \
|
||||
ARM_EMIT((p), ARM_DEF_VFP_LSF((cond),ARM_VFP_COPROC_SINGLE,1,ARMOP_LDR,0,(base),(freg),(offset)))
|
||||
#define ARM_FLDS(p,freg,base,offset) \
|
||||
ARM_FLDS_COND(p,freg,base,offset,ARMCOND_AL)
|
||||
|
||||
#define ARM_FLDD_COND(p,freg,base,offset,cond) \
|
||||
ARM_EMIT((p), ARM_DEF_VFP_LSF((cond),ARM_VFP_COPROC_DOUBLE,1,ARMOP_LDR,0,(base),(freg),(offset)))
|
||||
#define ARM_FLDD(p,freg,base,offset) \
|
||||
ARM_FLDD_COND(p,freg,base,offset,ARMCOND_AL)
|
||||
|
||||
#define ARM_FSTS_COND(p,freg,base,offset,cond) \
|
||||
ARM_EMIT((p), ARM_DEF_VFP_LSF((cond),ARM_VFP_COPROC_SINGLE,1,ARMOP_STR,0,(base),(freg),(offset)))
|
||||
#define ARM_FSTS(p,freg,base,offset) \
|
||||
ARM_FSTS_COND(p,freg,base,offset,ARMCOND_AL)
|
||||
|
||||
#define ARM_FSTD_COND(p,freg,base,offset,cond) \
|
||||
ARM_EMIT((p), ARM_DEF_VFP_LSF((cond),ARM_VFP_COPROC_DOUBLE,1,ARMOP_STR,0,(base),(freg),(offset)))
|
||||
#define ARM_FSTD(p,freg,base,offset) \
|
||||
ARM_FSTD_COND(p,freg,base,offset,ARMCOND_AL)
|
||||
|
||||
#define ARM_FLDMD_COND(p,first_reg,nregs,base,cond) \
|
||||
ARM_EMIT((p), ARM_DEF_VFP_LSF((cond),ARM_VFP_COPROC_DOUBLE,0,ARMOP_LDR,0,(base),(first_reg),((nregs) * 2) << 2))
|
||||
|
||||
#define ARM_FLDMD(p,first_reg,nregs,base) \
|
||||
ARM_FLDMD_COND(p,first_reg,nregs,base,ARMCOND_AL)
|
||||
|
||||
#define ARM_FSTMD_COND(p,first_reg,nregs,base,cond) \
|
||||
ARM_EMIT((p), ARM_DEF_VFP_LSF((cond),ARM_VFP_COPROC_DOUBLE,0,ARMOP_STR,0,(base),(first_reg),((nregs) * 2) << 2))
|
||||
|
||||
#define ARM_FSTMD(p,first_reg,nregs,base) \
|
||||
ARM_FSTMD_COND(p,first_reg,nregs,base,ARMCOND_AL)
|
||||
|
||||
#include <mono/arch/arm/arm_vfpmacros.h>
|
||||
|
||||
/* coprocessor register transfer */
|
||||
#define ARM_FMSR(p,freg,reg) \
|
||||
ARM_EMIT((p), ARM_DEF_VFP_CPT(ARMCOND_AL,ARM_VFP_COPROC_SINGLE,0,0,(freg),(reg)))
|
||||
#define ARM_FMRS(p,reg,freg) \
|
||||
ARM_EMIT((p), ARM_DEF_VFP_CPT(ARMCOND_AL,ARM_VFP_COPROC_SINGLE,0,1,(freg),(reg)))
|
||||
|
||||
#define ARM_FMDLR(p,freg,reg) \
|
||||
ARM_EMIT((p), ARM_DEF_VFP_CPT(ARMCOND_AL,ARM_VFP_COPROC_DOUBLE,0,0,(freg),(reg)))
|
||||
#define ARM_FMRDL(p,reg,freg) \
|
||||
ARM_EMIT((p), ARM_DEF_VFP_CPT(ARMCOND_AL,ARM_VFP_COPROC_DOUBLE,0,1,(freg),(reg)))
|
||||
#define ARM_FMDHR(p,freg,reg) \
|
||||
ARM_EMIT((p), ARM_DEF_VFP_CPT(ARMCOND_AL,ARM_VFP_COPROC_DOUBLE,1,0,(freg),(reg)))
|
||||
#define ARM_FMRDH(p,reg,freg) \
|
||||
ARM_EMIT((p), ARM_DEF_VFP_CPT(ARMCOND_AL,ARM_VFP_COPROC_DOUBLE,1,1,(freg),(reg)))
|
||||
|
||||
#define ARM_FMXR(p,freg,reg) \
|
||||
ARM_EMIT((p), ARM_DEF_VFP_CPT(ARMCOND_AL,ARM_VFP_COPROC_SINGLE,7,0,(freg),(reg)))
|
||||
#define ARM_FMRX(p,reg,fcreg) \
|
||||
ARM_EMIT((p), ARM_DEF_VFP_CPT(ARMCOND_AL,ARM_VFP_COPROC_SINGLE,7,1,(fcreg),(reg)))
|
||||
|
||||
#define ARM_FMSTAT(p) \
|
||||
ARM_FMRX((p),ARMREG_R15,ARM_VFP_SCR)
|
||||
|
||||
#define ARM_DEF_MCRR(cond,cp,rn,rd,Fm,M) \
|
||||
((Fm) << 0) | \
|
||||
(1 << 4) | \
|
||||
((M) << 5) | \
|
||||
((cp) << 8) | \
|
||||
((rd) << 12) | \
|
||||
((rn) << 16) | \
|
||||
((2) << 21) | \
|
||||
(12 << 24) | \
|
||||
ARM_DEF_COND(cond)
|
||||
|
||||
#define ARM_FMDRR(p,rd,rn,dm) \
|
||||
ARM_EMIT((p), ARM_DEF_MCRR(ARMCOND_AL,ARM_VFP_COPROC_DOUBLE,(rn),(rd),(dm) >> 1, (dm) & 1))
|
||||
|
||||
#define ARM_DEF_FMRRD(cond,cp,rn,rd,Dm,D) \
|
||||
((Dm) << 0) | \
|
||||
(1 << 4) | \
|
||||
((cp) << 8) | \
|
||||
((rd) << 12) | \
|
||||
((rn) << 16) | \
|
||||
((0xc5) << 20) | \
|
||||
ARM_DEF_COND(cond)
|
||||
|
||||
#define ARM_FMRRD(p,rd,rn,dm) \
|
||||
ARM_EMIT((p), ARM_DEF_FMRRD(ARMCOND_AL,ARM_VFP_COPROC_DOUBLE,(rn),(rd),(dm) >> 1, (dm) & 1))
|
||||
|
||||
#define ARM_DEF_FUITOS(cond,Dd,D,Fm,M) ((cond) << 28) | ((0x1d) << 23) | ((D) << 22) | ((0x3) << 20) | ((8) << 16) | ((Dd) << 12) | ((0xa) << 8) | ((1) << 6) | ((M) << 5) | ((Fm) << 0)
|
||||
|
||||
#define ARM_FUITOS(p,dreg,sreg) \
|
||||
ARM_EMIT((p), ARM_DEF_FUITOS (ARMCOND_AL, (dreg) >> 1, (dreg) & 1, (sreg) >> 1, (sreg) & 1))
|
||||
|
||||
#define ARM_DEF_FUITOD(cond,Dd,D,Fm,M) ((cond) << 28) | ((0x1d) << 23) | ((D) << 22) | ((0x3) << 20) | ((8) << 16) | ((Dd) << 12) | ((0xb) << 8) | ((1) << 6) | ((M) << 5) | ((Fm) << 0)
|
||||
|
||||
#define ARM_FUITOD(p,dreg,sreg) \
|
||||
ARM_EMIT((p), ARM_DEF_FUITOD (ARMCOND_AL, (dreg) >> 1, (dreg) & 1, (sreg) >> 1, (sreg) & 1))
|
||||
|
||||
#define ARM_DEF_FSITOS(cond,Dd,D,Fm,M) ((cond) << 28) | ((0x1d) << 23) | ((D) << 22) | ((0x3) << 20) | ((8) << 16) | ((Dd) << 12) | ((0xa) << 8) | ((1) << 7) | ((1) << 6) | ((M) << 5) | ((Fm) << 0)
|
||||
|
||||
#define ARM_FSITOS(p,dreg,sreg) \
|
||||
ARM_EMIT((p), ARM_DEF_FSITOS (ARMCOND_AL, (dreg) >> 1, (dreg) & 1, (sreg) >> 1, (sreg) & 1))
|
||||
|
||||
#define ARM_DEF_FSITOD(cond,Dd,D,Fm,M) ((cond) << 28) | ((0x1d) << 23) | ((D) << 22) | ((0x3) << 20) | ((8) << 16) | ((Dd) << 12) | ((0xb) << 8) | ((1) << 7) | ((1) << 6) | ((M) << 5) | ((Fm) << 0)
|
||||
|
||||
#define ARM_FSITOD(p,dreg,sreg) \
|
||||
ARM_EMIT((p), ARM_DEF_FSITOD (ARMCOND_AL, (dreg) >> 1, (dreg) & 1, (sreg) >> 1, (sreg) & 1))
|
||||
|
||||
#endif /* __MONO_ARM_VFP_CODEGEN_H__ */
|
||||
|
||||
@@ -1,177 +0,0 @@
|
||||
/*
|
||||
* ARM CodeGen
|
||||
* XScale WirelessMMX extensions
|
||||
* Copyright 2002 Wild West Software
|
||||
*/
|
||||
|
||||
#ifndef __WMMX_H__
|
||||
#define __WMMX_H__ 1
|
||||
|
||||
#if 0
|
||||
#include <arm-codegen.h>
|
||||
#endif
|
||||
|
||||
#if defined(ARM_IASM)
|
||||
# define WM_ASM(_expr) ARM_IASM(_expr)
|
||||
#else
|
||||
# define WM_ASM(_expr) __emit (_expr)
|
||||
#endif
|
||||
|
||||
#if defined(ARM_EMIT)
|
||||
# define WM_EMIT(p, i) ARM_EMIT(p, i)
|
||||
#else
|
||||
# define WM_EMIT(p, i)
|
||||
#endif
|
||||
|
||||
enum {
|
||||
WM_CC_EQ = 0x0,
|
||||
WM_CC_NE = 0x1,
|
||||
WM_CC_CS = 0x2,
|
||||
WM_CC_HS = WM_CC_CS,
|
||||
WM_CC_CC = 0x3,
|
||||
WM_CC_LO = WM_CC_CC,
|
||||
WM_CC_MI = 0x4,
|
||||
WM_CC_PL = 0x5,
|
||||
WM_CC_VS = 0x6,
|
||||
WM_CC_VC = 0x7,
|
||||
WM_CC_HI = 0x8,
|
||||
WM_CC_LS = 0x9,
|
||||
WM_CC_GE = 0xA,
|
||||
WM_CC_LT = 0xB,
|
||||
WM_CC_GT = 0xC,
|
||||
WM_CC_LE = 0xD,
|
||||
WM_CC_AL = 0xE,
|
||||
WM_CC_NV = 0xF,
|
||||
WM_CC_SHIFT = 28
|
||||
};
|
||||
|
||||
#if defined(ARM_DEF_COND)
|
||||
# define WM_DEF_CC(_cc) ARM_DEF_COND(_cc)
|
||||
#else
|
||||
# define WM_DEF_CC(_cc) ((_cc & 0xF) << WM_CC_SHIFT)
|
||||
#endif
|
||||
|
||||
|
||||
enum {
|
||||
WM_R0 = 0x0,
|
||||
WM_R1 = 0x1,
|
||||
WM_R2 = 0x2,
|
||||
WM_R3 = 0x3,
|
||||
WM_R4 = 0x4,
|
||||
WM_R5 = 0x5,
|
||||
WM_R6 = 0x6,
|
||||
WM_R7 = 0x7,
|
||||
WM_R8 = 0x8,
|
||||
WM_R9 = 0x9,
|
||||
WM_R10 = 0xA,
|
||||
WM_R11 = 0xB,
|
||||
WM_R12 = 0xC,
|
||||
WM_R13 = 0xD,
|
||||
WM_R14 = 0xE,
|
||||
WM_R15 = 0xF,
|
||||
|
||||
WM_wR0 = 0x0,
|
||||
WM_wR1 = 0x1,
|
||||
WM_wR2 = 0x2,
|
||||
WM_wR3 = 0x3,
|
||||
WM_wR4 = 0x4,
|
||||
WM_wR5 = 0x5,
|
||||
WM_wR6 = 0x6,
|
||||
WM_wR7 = 0x7,
|
||||
WM_wR8 = 0x8,
|
||||
WM_wR9 = 0x9,
|
||||
WM_wR10 = 0xA,
|
||||
WM_wR11 = 0xB,
|
||||
WM_wR12 = 0xC,
|
||||
WM_wR13 = 0xD,
|
||||
WM_wR14 = 0xE,
|
||||
WM_wR15 = 0xF
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Qualifiers:
|
||||
* H - 16-bit (HalfWord) SIMD
|
||||
* W - 32-bit (Word) SIMD
|
||||
* D - 64-bit (Double)
|
||||
*/
|
||||
enum {
|
||||
WM_B = 0,
|
||||
WM_H = 1,
|
||||
WM_D = 2
|
||||
};
|
||||
|
||||
/*
|
||||
* B.2.3 Transfers From Coprocessor Register (MRC)
|
||||
* Table B-5
|
||||
*/
|
||||
enum {
|
||||
WM_TMRC_OP2 = 0,
|
||||
WM_TMRC_CPNUM = 1,
|
||||
|
||||
WM_TMOVMSK_OP2 = 1,
|
||||
WM_TMOVMSK_CPNUM = 0,
|
||||
|
||||
WM_TANDC_OP2 = 1,
|
||||
WM_TANDC_CPNUM = 1,
|
||||
|
||||
WM_TORC_OP2 = 2,
|
||||
WM_TORC_CPNUM = 1,
|
||||
|
||||
WM_TEXTRC_OP2 = 3,
|
||||
WM_TEXTRC_CPNUM = 1,
|
||||
|
||||
WM_TEXTRM_OP2 = 3,
|
||||
WM_TEXTRM_CPNUM = 0
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* TANDC<B,H,W>{Cond} R15
|
||||
* Performs AND across the fields of the SIMD PSR register (wCASF) and sends the result
|
||||
* to CPSR; can be performed after a Byte, Half-word or Word operation that sets the flags.
|
||||
* NOTE: R15 is omitted from the macro declaration;
|
||||
*/
|
||||
#define DEF_WM_TNADC_CC(_q, _cc) WM_DEF_CC((_cc)) + ((_q) << 0x16) + 0xE13F130
|
||||
|
||||
#define _WM_TNADC_CC(_q, _cc) WM_ASM(DEF_WM_TNADC_CC(_q, _cc))
|
||||
#define ARM_WM_TNADC_CC(_p, _q, _cc) WM_EMIT(_p, DEF_WM_TNADC_CC(_q, _cc))
|
||||
|
||||
/* inline assembly */
|
||||
#define _WM_TNADC(_q) _WM_TNADC_CC((_q), WM_CC_AL)
|
||||
#define _WM_TNADCB() _WM_TNADC(WM_B)
|
||||
#define _WM_TNADCH() _WM_TNADC(WM_H)
|
||||
#define _WM_TNADCD() _WM_TNADC(WM_D)
|
||||
|
||||
/* codegen */
|
||||
#define ARM_WM_TNADC(_p, _q) ARM_WM_TNADC_CC((_p), (_q), WM_CC_AL)
|
||||
#define ARM_WM_TNADCB(_p) ARM_WM_TNADC(_p, WM_B)
|
||||
#define ARM_WM_TNADCH(_p) ARM_WM_TNADC(_p, WM_H)
|
||||
#define ARM_WM_TNADCD(_p) ARM_WM_TNADC(_p, WM_D)
|
||||
|
||||
|
||||
/*
|
||||
* TBCST<B,H,W>{Cond} wRd, Rn
|
||||
* Broadcasts a value from the ARM Source reg (Rn) to every SIMD position
|
||||
* in the WMMX Destination reg (wRd).
|
||||
*/
|
||||
#define DEF_WM_TBCST_CC(_q, _cc, _wrd, _rn) \
|
||||
WM_DEF_CC((_cc)) + ((_q) << 6) + ((_wrd) << 16) + ((_rn) << 12) + 0xE200010
|
||||
|
||||
#define _WM_TBCST_CC(_q, _cc, _wrd, _rn) WM_ASM(DEF_WM_TBCST_CC(_q, _cc, _wrd, _rn))
|
||||
#define ARM_WM_TBCST_CC(_p, _q, _cc, _wrd, _rn) WM_EMIT(_p, DEF_WM_TBCST_CC(_q, _cc, _wrd, _rn))
|
||||
|
||||
/* inline */
|
||||
#define _WM_TBCST(_q, _wrd, _rn) _WM_TBCST_CC(_q, WM_CC_AL, _wrd, _rn)
|
||||
#define _WM_TBCSTB(_wrd, _rn) _WM_TBCST(WM_B)
|
||||
#define _WM_TBCSTH(_wrd, _rn) _WM_TBCST(WM_H)
|
||||
#define _WM_TBCSTD(_wrd, _rn) _WM_TBCST(WM_D)
|
||||
|
||||
/* codegen */
|
||||
#define ARM_WM_TBCST(_p, _q, _wrd, _rn) ARM_WM_TBCST_CC(_p, _q, WM_CC_AL, _wrd, _rn)
|
||||
#define ARM_WM_TBCSTB(_p, _wrd, _rn) _WM_TBCST(_p, WM_B)
|
||||
#define ARM_WM_TBCSTH(_p, _wrd, _rn) _WM_TBCST(_p, WM_H)
|
||||
#define ARM_WM_TBCSTD(_p, _wrd, _rn) _WM_TBCST(_p, WM_D)
|
||||
|
||||
|
||||
#endif /* __WMMX_H__ */
|
||||
@@ -1,56 +0,0 @@
|
||||
/* PSR := <Op> Rn, (imm8 ROR 2*rot) */
|
||||
#define ARM_<Op>_REG_IMM_COND(p, rn, imm8, rot, cond) \
|
||||
ARM_DPIOP_S_REG_IMM8ROT_COND(p, ARMOP_<Op>, 0, rn, imm8, rot, cond)
|
||||
#define ARM_<Op>_REG_IMM(p, rn, imm8, rot) \
|
||||
ARM_<Op>_REG_IMM_COND(p, rn, imm8, rot, ARMCOND_AL)
|
||||
|
||||
#ifndef ARM_NOIASM
|
||||
#define _<Op>_REG_IMM_COND(rn, imm8, rot, cond) \
|
||||
ARM_IASM_DPIOP_S_REG_IMM8ROT_COND(ARMOP_<Op>, 0, rn, imm8, rot, cond)
|
||||
#define _<Op>_REG_IMM(rn, imm8, rot) \
|
||||
_<Op>_REG_IMM_COND(rn, imm8, rot, ARMCOND_AL)
|
||||
#endif
|
||||
|
||||
|
||||
/* PSR := <Op> Rn, imm8 */
|
||||
#define ARM_<Op>_REG_IMM8_COND(p, rn, imm8, cond) \
|
||||
ARM_<Op>_REG_IMM_COND(p, rn, imm8, 0, cond)
|
||||
#define ARM_<Op>_REG_IMM8(p, rn, imm8) \
|
||||
ARM_<Op>_REG_IMM8_COND(p, rn, imm8, ARMCOND_AL)
|
||||
|
||||
#ifndef ARM_NOIASM
|
||||
#define _<Op>_REG_IMM8_COND(rn, imm8, cond) \
|
||||
_<Op>_REG_IMM_COND(rn, imm8, 0, cond)
|
||||
#define _<Op>_REG_IMM8(rn, imm8) \
|
||||
_<Op>_REG_IMM8_COND(rn, imm8, ARMCOND_AL)
|
||||
#endif
|
||||
|
||||
|
||||
/* PSR := <Op> Rn, Rm */
|
||||
#define ARM_<Op>_REG_REG_COND(p, rn, rm, cond) \
|
||||
ARM_DPIOP_S_REG_REG_COND(p, ARMOP_<Op>, 0, rn, rm, cond)
|
||||
#define ARM_<Op>_REG_REG(p, rn, rm) \
|
||||
ARM_<Op>_REG_REG_COND(p, rn, rm, ARMCOND_AL)
|
||||
|
||||
#ifndef ARM_NOIASM
|
||||
#define _<Op>_REG_REG_COND(rn, rm, cond) \
|
||||
ARM_IASM_DPIOP_S_REG_REG_COND(ARMOP_<Op>, 0, rn, rm, cond)
|
||||
#define _<Op>_REG_REG(rn, rm) \
|
||||
_<Op>_REG_REG_COND(rn, rm, ARMCOND_AL)
|
||||
#endif
|
||||
|
||||
|
||||
/* PSR := <Op> Rn, (Rm <shift_type> imm8) */
|
||||
#define ARM_<Op>_REG_IMMSHIFT_COND(p, rn, rm, shift_type, imm_shift, cond) \
|
||||
ARM_DPIOP_S_REG_IMMSHIFT_COND(p, ARMOP_<Op>, 0, rn, rm, shift_type, imm_shift, cond)
|
||||
#define ARM_<Op>_REG_IMMSHIFT(p, rn, rm, shift_type, imm_shift) \
|
||||
ARM_<Op>_REG_IMMSHIFT_COND(p, rn, rm, shift_type, imm_shift, ARMCOND_AL)
|
||||
|
||||
#ifndef ARM_NOIASM
|
||||
#define _<Op>_REG_IMMSHIFT_COND(rn, rm, shift_type, imm_shift, cond) \
|
||||
ARM_IASM_DPIOP_S_REG_IMMSHIFT_COND(ARMOP_<Op>, 0, rn, rm, shift_type, imm_shift, cond)
|
||||
#define _<Op>_REG_IMMSHIFT(rn, rm, shift_type, imm_shift) \
|
||||
_<Op>_REG_IMMSHIFT_COND(rn, rm, shift_type, imm_shift, ARMCOND_AL)
|
||||
#endif
|
||||
|
||||
|
||||
@@ -1,112 +0,0 @@
|
||||
/* -- <Op> -- */
|
||||
|
||||
/* Rd := Rn <Op> (imm8 ROR rot) ; rot is power of 2 */
|
||||
#define ARM_<Op>_REG_IMM_COND(p, rd, rn, imm8, rot, cond) \
|
||||
ARM_DPIOP_REG_IMM8ROT_COND(p, ARMOP_<Op>, rd, rn, imm8, rot, cond)
|
||||
#define ARM_<Op>_REG_IMM(p, rd, rn, imm8, rot) \
|
||||
ARM_<Op>_REG_IMM_COND(p, rd, rn, imm8, rot, ARMCOND_AL)
|
||||
#define ARM_<Op>S_REG_IMM_COND(p, rd, rn, imm8, rot, cond) \
|
||||
ARM_DPIOP_S_REG_IMM8ROT_COND(p, ARMOP_<Op>, rd, rn, imm8, rot, cond)
|
||||
#define ARM_<Op>S_REG_IMM(p, rd, rn, imm8, rot) \
|
||||
ARM_<Op>S_REG_IMM_COND(p, rd, rn, imm8, rot, ARMCOND_AL)
|
||||
|
||||
#ifndef ARM_NOIASM
|
||||
#define _<Op>_REG_IMM_COND(rd, rn, imm8, rot, cond) \
|
||||
ARM_IASM_DPIOP_REG_IMM8ROT_COND(ARMOP_<Op>, rd, rn, imm8, rot, cond)
|
||||
#define _<Op>_REG_IMM(rd, rn, imm8, rot) \
|
||||
_<Op>_REG_IMM_COND(rd, rn, imm8, rot, ARMCOND_AL)
|
||||
#define _<Op>S_REG_IMM_COND(rd, rn, imm8, rot, cond) \
|
||||
ARM_IASM_DPIOP_S_REG_IMM8ROT_COND(ARMOP_<Op>, rd, rn, imm8, rot, cond)
|
||||
#define _<Op>S_REG_IMM(rd, rn, imm8, rot) \
|
||||
_<Op>S_REG_IMM_COND(rd, rn, imm8, rot, ARMCOND_AL)
|
||||
#endif
|
||||
|
||||
|
||||
/* Rd := Rn <Op> imm8 */
|
||||
#define ARM_<Op>_REG_IMM8_COND(p, rd, rn, imm8, cond) \
|
||||
ARM_<Op>_REG_IMM_COND(p, rd, rn, imm8, 0, cond)
|
||||
#define ARM_<Op>_REG_IMM8(p, rd, rn, imm8) \
|
||||
ARM_<Op>_REG_IMM8_COND(p, rd, rn, imm8, ARMCOND_AL)
|
||||
#define ARM_<Op>S_REG_IMM8_COND(p, rd, rn, imm8, cond) \
|
||||
ARM_<Op>S_REG_IMM_COND(p, rd, rn, imm8, 0, cond)
|
||||
#define ARM_<Op>S_REG_IMM8(p, rd, rn, imm8) \
|
||||
ARM_<Op>S_REG_IMM8_COND(p, rd, rn, imm8, ARMCOND_AL)
|
||||
|
||||
#ifndef ARM_NOIASM
|
||||
#define _<Op>_REG_IMM8_COND(rd, rn, imm8, cond) \
|
||||
_<Op>_REG_IMM_COND(rd, rn, imm8, 0, cond)
|
||||
#define _<Op>_REG_IMM8(rd, rn, imm8) \
|
||||
_<Op>_REG_IMM8_COND(rd, rn, imm8, ARMCOND_AL)
|
||||
#define _<Op>S_REG_IMM8_COND(rd, rn, imm8, cond) \
|
||||
_<Op>S_REG_IMM_COND(rd, rn, imm8, 0, cond)
|
||||
#define _<Op>S_REG_IMM8(rd, rn, imm8) \
|
||||
_<Op>S_REG_IMM8_COND(rd, rn, imm8, ARMCOND_AL)
|
||||
#endif
|
||||
|
||||
|
||||
/* Rd := Rn <Op> Rm */
|
||||
#define ARM_<Op>_REG_REG_COND(p, rd, rn, rm, cond) \
|
||||
ARM_DPIOP_REG_REG_COND(p, ARMOP_<Op>, rd, rn, rm, cond)
|
||||
#define ARM_<Op>_REG_REG(p, rd, rn, rm) \
|
||||
ARM_<Op>_REG_REG_COND(p, rd, rn, rm, ARMCOND_AL)
|
||||
#define ARM_<Op>S_REG_REG_COND(p, rd, rn, rm, cond) \
|
||||
ARM_DPIOP_S_REG_REG_COND(p, ARMOP_<Op>, rd, rn, rm, cond)
|
||||
#define ARM_<Op>S_REG_REG(p, rd, rn, rm) \
|
||||
ARM_<Op>S_REG_REG_COND(p, rd, rn, rm, ARMCOND_AL)
|
||||
|
||||
#ifndef ARM_NOIASM
|
||||
#define _<Op>_REG_REG_COND(rd, rn, rm, cond) \
|
||||
ARM_IASM_DPIOP_REG_REG_COND(ARMOP_<Op>, rd, rn, rm, cond)
|
||||
#define _<Op>_REG_REG(rd, rn, rm) \
|
||||
_<Op>_REG_REG_COND(rd, rn, rm, ARMCOND_AL)
|
||||
#define _<Op>S_REG_REG_COND(rd, rn, rm, cond) \
|
||||
ARM_IASM_DPIOP_S_REG_REG_COND(ARMOP_<Op>, rd, rn, rm, cond)
|
||||
#define _<Op>S_REG_REG(rd, rn, rm) \
|
||||
_<Op>S_REG_REG_COND(rd, rn, rm, ARMCOND_AL)
|
||||
#endif
|
||||
|
||||
|
||||
/* Rd := Rn <Op> (Rm <shift_type> imm_shift) */
|
||||
#define ARM_<Op>_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, cond) \
|
||||
ARM_DPIOP_REG_IMMSHIFT_COND(p, ARMOP_<Op>, rd, rn, rm, shift_type, imm_shift, cond)
|
||||
#define ARM_<Op>_REG_IMMSHIFT(p, rd, rn, rm, shift_type, imm_shift) \
|
||||
ARM_<Op>_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
|
||||
#define ARM_<Op>S_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, cond) \
|
||||
ARM_DPIOP_S_REG_IMMSHIFT_COND(p, ARMOP_<Op>, rd, rn, rm, shift_type, imm_shift, cond)
|
||||
#define ARM_<Op>S_REG_IMMSHIFT(p, rd, rn, rm, shift_type, imm_shift) \
|
||||
ARM_<Op>S_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
|
||||
|
||||
#ifndef ARM_NOIASM
|
||||
#define _<Op>_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, cond) \
|
||||
ARM_IASM_DPIOP_REG_IMMSHIFT_COND(ARMOP_<Op>, rd, rn, rm, shift_type, imm_shift, cond)
|
||||
#define _<Op>_REG_IMMSHIFT(rd, rn, rm, shift_type, imm_shift) \
|
||||
_<Op>_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
|
||||
#define _<Op>S_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, cond) \
|
||||
ARM_IASM_DPIOP_S_REG_IMMSHIFT_COND(ARMOP_<Op>, rd, rn, rm, shift_type, imm_shift, cond)
|
||||
#define _<Op>S_REG_IMMSHIFT(rd, rn, rm, shift_type, imm_shift) \
|
||||
_<Op>S_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
|
||||
#endif
|
||||
|
||||
|
||||
/* Rd := Rn <Op> (Rm <shift_type> Rs) */
|
||||
#define ARM_<Op>_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, cond) \
|
||||
ARM_DPIOP_REG_REGSHIFT_COND(p, ARMOP_<Op>, rd, rn, rm, shift_t, rs, cond)
|
||||
#define ARM_<Op>_REG_REGSHIFT(p, rd, rn, rm, shift_type, rs) \
|
||||
ARM_<Op>_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, ARMCOND_AL)
|
||||
#define ARM_<Op>S_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, cond) \
|
||||
ARM_DPIOP_S_REG_REGSHIFT_COND(p, ARMOP_<Op>, rd, rn, rm, shift_t, rs, cond)
|
||||
#define ARM_<Op>S_REG_REGSHIFT(p, rd, rn, rm, shift_type, rs) \
|
||||
ARM_<Op>S_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, ARMCOND_AL)
|
||||
|
||||
#ifndef ARM_NOIASM
|
||||
#define _<Op>_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, cond) \
|
||||
ARM_IASM_DPIOP_REG_REGSHIFT_COND(ARMOP_<Op>, rd, rn, rm, shift_t, rs, cond)
|
||||
#define _<Op>_REG_REGSHIFT(rd, rn, rm, shift_type, rs) \
|
||||
_<Op>_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, ARMCOND_AL)
|
||||
#define _<Op>S_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, cond) \
|
||||
ARM_IASM_DPIOP_S_REG_REGSHIFT_COND(ARMOP_<Op>, rd, rn, rm, shift_t, rs, cond)
|
||||
#define _<Op>S_REG_REGSHIFT(rd, rn, rm, shift_type, rs) \
|
||||
_<Op>S_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, ARMCOND_AL)
|
||||
#endif
|
||||
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
OPCODES="AND EOR SUB RSB ADD ADC SBC RSC ORR BIC"
|
||||
CMP_OPCODES="TST TEQ CMP CMN"
|
||||
MOV_OPCODES="MOV MVN"
|
||||
|
||||
# $1: opcode list
|
||||
# $2: template
|
||||
gen() {
|
||||
for i in $1; do
|
||||
sed "s/<Op>/$i/g" $2.th
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
|
||||
echo -e "/* Macros for DPI ops, auto-generated from template */\n"
|
||||
|
||||
echo -e "\n/* mov/mvn */\n"
|
||||
gen "$MOV_OPCODES" mov_macros
|
||||
|
||||
echo -e "\n/* DPIs, arithmetic and logical */\n"
|
||||
gen "$OPCODES" dpi_macros
|
||||
|
||||
echo -e "\n\n"
|
||||
|
||||
echo -e "\n/* DPIs, comparison */\n"
|
||||
gen "$CMP_OPCODES" cmp_macros
|
||||
|
||||
echo -e "\n/* end generated */\n"
|
||||
@@ -1,121 +0,0 @@
|
||||
/* Rd := imm8 ROR rot */
|
||||
#define ARM_<Op>_REG_IMM_COND(p, reg, imm8, rot, cond) \
|
||||
ARM_DPIOP_REG_IMM8ROT_COND(p, ARMOP_<Op>, reg, 0, imm8, rot, cond)
|
||||
#define ARM_<Op>_REG_IMM(p, reg, imm8, rot) \
|
||||
ARM_<Op>_REG_IMM_COND(p, reg, imm8, rot, ARMCOND_AL)
|
||||
/* S */
|
||||
#define ARM_<Op>S_REG_IMM_COND(p, reg, imm8, rot, cond) \
|
||||
ARM_DPIOP_S_REG_IMM8ROT_COND(p, ARMOP_<Op>, reg, 0, imm8, rot, cond)
|
||||
#define ARM_<Op>S_REG_IMM(p, reg, imm8, rot) \
|
||||
ARM_<Op>S_REG_IMM_COND(p, reg, imm8, rot, ARMCOND_AL)
|
||||
|
||||
#ifndef ARM_NOIASM
|
||||
#define _<Op>_REG_IMM_COND(reg, imm8, rot, cond) \
|
||||
ARM_IASM_DPIOP_REG_IMM8ROT_COND(ARMOP_<Op>, reg, 0, imm8, rot, cond)
|
||||
#define _<Op>_REG_IMM(reg, imm8, rot) \
|
||||
_<Op>_REG_IMM_COND(reg, imm8, rot, ARMCOND_AL)
|
||||
/* S */
|
||||
#define _<Op>S_REG_IMM_COND(reg, imm8, rot, cond) \
|
||||
ARM_IASM_DPIOP_S_REG_IMM8ROT_COND(ARMOP_<Op>, reg, 0, imm8, rot, cond)
|
||||
#define _<Op>S_REG_IMM(reg, imm8, rot) \
|
||||
_<Op>S_REG_IMM_COND(reg, imm8, rot, ARMCOND_AL)
|
||||
#endif
|
||||
|
||||
|
||||
/* Rd := imm8 */
|
||||
#define ARM_<Op>_REG_IMM8_COND(p, reg, imm8, cond) \
|
||||
ARM_DPIOP_REG_IMM8ROT_COND(p, ARMOP_<Op>, reg, 0, imm8, 0, cond)
|
||||
#define ARM_<Op>_REG_IMM8(p, reg, imm8) \
|
||||
ARM_<Op>_REG_IMM8_COND(p, reg, imm8, ARMCOND_AL)
|
||||
/* S */
|
||||
#define ARM_<Op>S_REG_IMM8_COND(p, reg, imm8, cond) \
|
||||
ARM_DPIOP_S_REG_IMM8ROT_COND(p, ARMOP_<Op>, reg, 0, imm8, 0, cond)
|
||||
#define ARM_<Op>S_REG_IMM8(p, reg, imm8) \
|
||||
ARM_<Op>S_REG_IMM8_COND(p, reg, imm8, ARMCOND_AL)
|
||||
|
||||
#ifndef ARM_NOIASM
|
||||
#define _<Op>_REG_IMM8_COND(reg, imm8, cond) \
|
||||
ARM_IASM_DPIOP_REG_IMM8ROT_COND(ARMOP_<Op>, reg, 0, imm8, 0, cond)
|
||||
#define _<Op>_REG_IMM8(reg, imm8) \
|
||||
_<Op>_REG_IMM8_COND(reg, imm8, ARMCOND_AL)
|
||||
/* S */
|
||||
#define _<Op>S_REG_IMM8_COND(reg, imm8, cond) \
|
||||
ARM_IASM_DPIOP_S_REG_IMM8ROT_COND(ARMOP_<Op>, reg, 0, imm8, 0, cond)
|
||||
#define _<Op>S_REG_IMM8(reg, imm8) \
|
||||
_<Op>S_REG_IMM8_COND(reg, imm8, ARMCOND_AL)
|
||||
#endif
|
||||
|
||||
|
||||
/* Rd := Rm */
|
||||
#define ARM_<Op>_REG_REG_COND(p, rd, rm, cond) \
|
||||
ARM_DPIOP_REG_REG_COND(p, ARMOP_<Op>, rd, 0, rm, cond)
|
||||
#define ARM_<Op>_REG_REG(p, rd, rm) \
|
||||
ARM_<Op>_REG_REG_COND(p, rd, rm, ARMCOND_AL)
|
||||
/* S */
|
||||
#define ARM_<Op>S_REG_REG_COND(p, rd, rm, cond) \
|
||||
ARM_DPIOP_S_REG_REG_COND(p, ARMOP_<Op>, rd, 0, rm, cond)
|
||||
#define ARM_<Op>S_REG_REG(p, rd, rm) \
|
||||
ARM_<Op>S_REG_REG_COND(p, rd, rm, ARMCOND_AL)
|
||||
|
||||
#ifndef ARM_NOIASM
|
||||
#define _<Op>_REG_REG_COND(rd, rm, cond) \
|
||||
ARM_IASM_DPIOP_REG_REG_COND(ARMOP_<Op>, rd, 0, rm, cond)
|
||||
#define _<Op>_REG_REG(rd, rm) \
|
||||
_<Op>_REG_REG_COND(rd, rm, ARMCOND_AL)
|
||||
/* S */
|
||||
#define _<Op>S_REG_REG_COND(rd, rm, cond) \
|
||||
ARM_IASM_DPIOP_S_REG_REG_COND(ARMOP_<Op>, rd, 0, rm, cond)
|
||||
#define _<Op>S_REG_REG(rd, rm) \
|
||||
_<Op>S_REG_REG_COND(rd, rm, ARMCOND_AL)
|
||||
#endif
|
||||
|
||||
|
||||
/* Rd := Rm <shift_type> imm_shift */
|
||||
#define ARM_<Op>_REG_IMMSHIFT_COND(p, rd, rm, shift_type, imm_shift, cond) \
|
||||
ARM_DPIOP_REG_IMMSHIFT_COND(p, ARMOP_<Op>, rd, 0, rm, shift_type, imm_shift, cond)
|
||||
#define ARM_<Op>_REG_IMMSHIFT(p, rd, rm, shift_type, imm_shift) \
|
||||
ARM_<Op>_REG_IMMSHIFT_COND(p, rd, rm, shift_type, imm_shift, ARMCOND_AL)
|
||||
/* S */
|
||||
#define ARM_<Op>S_REG_IMMSHIFT_COND(p, rd, rm, shift_type, imm_shift, cond) \
|
||||
ARM_DPIOP_S_REG_IMMSHIFT_COND(p, ARMOP_<Op>, rd, 0, rm, shift_type, imm_shift, cond)
|
||||
#define ARM_<Op>S_REG_IMMSHIFT(p, rd, rm, shift_type, imm_shift) \
|
||||
ARM_<Op>S_REG_IMMSHIFT_COND(p, rd, rm, shift_type, imm_shift, ARMCOND_AL)
|
||||
|
||||
#ifndef ARM_NOIASM
|
||||
#define _<Op>_REG_IMMSHIFT_COND(rd, rm, shift_type, imm_shift, cond) \
|
||||
ARM_IASM_DPIOP_REG_IMMSHIFT_COND(ARMOP_<Op>, rd, 0, rm, shift_type, imm_shift, cond)
|
||||
#define _<Op>_REG_IMMSHIFT(rd, rm, shift_type, imm_shift) \
|
||||
_<Op>_REG_IMMSHIFT_COND(rd, rm, shift_type, imm_shift, ARMCOND_AL)
|
||||
/* S */
|
||||
#define _<Op>S_REG_IMMSHIFT_COND(rd, rm, shift_type, imm_shift, cond) \
|
||||
ARM_IASM_DPIOP_S_REG_IMMSHIFT_COND(ARMOP_<Op>, rd, 0, rm, shift_type, imm_shift, cond)
|
||||
#define _<Op>S_REG_IMMSHIFT(rd, rm, shift_type, imm_shift) \
|
||||
_<Op>S_REG_IMMSHIFT_COND(rd, rm, shift_type, imm_shift, ARMCOND_AL)
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/* Rd := (Rm <shift_type> Rs) */
|
||||
#define ARM_<Op>_REG_REGSHIFT_COND(p, rd, rm, shift_type, rs, cond) \
|
||||
ARM_DPIOP_REG_REGSHIFT_COND(p, ARMOP_<Op>, rd, 0, rm, shift_type, rs, cond)
|
||||
#define ARM_<Op>_REG_REGSHIFT(p, rd, rm, shift_type, rs) \
|
||||
ARM_<Op>_REG_REGSHIFT_COND(p, rd, rm, shift_type, rs, ARMCOND_AL)
|
||||
/* S */
|
||||
#define ARM_<Op>S_REG_REGSHIFT_COND(p, rd, rm, shift_type, rs, cond) \
|
||||
ARM_DPIOP_S_REG_REGSHIFT_COND(p, ARMOP_<Op>, rd, 0, rm, shift_type, rs, cond)
|
||||
#define ARM_<Op>S_REG_REGSHIFT(p, rd, rm, shift_type, rs) \
|
||||
ARM_<Op>S_REG_REGSHIFT_COND(p, rd, rm, shift_type, rs, ARMCOND_AL)
|
||||
|
||||
#ifndef ARM_NOIASM
|
||||
#define _<Op>_REG_REGSHIFT_COND(rd, rm, shift_type, rs, cond) \
|
||||
ARM_IASM_DPIOP_REG_REGSHIFT_COND(ARMOP_<Op>, rd, 0, rm, shift_type, rs, cond)
|
||||
#define _<Op>_REG_REGSHIFT(rd, rm, shift_type, rs) \
|
||||
_<Op>_REG_REGSHIFT_COND(rd, rm, shift_type, rs, ARMCOND_AL)
|
||||
/* S */
|
||||
#define _<Op>S_REG_REGSHIFT_COND(rd, rm, shift_type, rs, cond) \
|
||||
ARM_IASM_DPIOP_S_REG_REGSHIFT_COND(ARMOP_<Op>, rd, 0, rm, shift_type, rs, cond)
|
||||
#define _<Op>S_REG_REGSHIFT(rd, rm, shift_type, rs) \
|
||||
_<Op>S_REG_REGSHIFT_COND(rd, rm, shift_type, rs, ARMCOND_AL)
|
||||
#endif
|
||||
|
||||
|
||||
@@ -1,710 +0,0 @@
|
||||
/*
|
||||
* Create trampolines to invoke arbitrary functions.
|
||||
* Copyright (c) 2002 Sergey Chaban <serge@wildwestsoftware.com>
|
||||
*
|
||||
* Contributions by Malte Hildingson
|
||||
*/
|
||||
|
||||
#include "arm-codegen.h"
|
||||
#include "arm-dis.h"
|
||||
|
||||
#if defined(_WIN32_WCE) || defined (UNDER_CE)
|
||||
# include <windows.h>
|
||||
#else
|
||||
#include <unistd.h>
|
||||
#include <sys/mman.h>
|
||||
#endif
|
||||
|
||||
#if !defined(PLATFORM_MACOSX)
|
||||
#include <errno.h>
|
||||
|
||||
#include "mono/metadata/class.h"
|
||||
#include "mono/metadata/tabledefs.h"
|
||||
#include "mono/interpreter/interp.h"
|
||||
#include "mono/metadata/appdomain.h"
|
||||
|
||||
|
||||
#if 0
|
||||
# define ARM_DUMP_DISASM 1
|
||||
#endif
|
||||
|
||||
/* prototypes for private functions (to avoid compiler warnings) */
|
||||
void flush_icache (void);
|
||||
void* alloc_code_buff (int num_instr);
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* The resulting function takes the form:
|
||||
* void func (void (*callme)(), void *retval, void *this_obj, stackval *arguments);
|
||||
* NOTE: all args passed in ARM registers (A1-A4),
|
||||
* then copied to R4-R7 (see definitions below).
|
||||
*/
|
||||
|
||||
#define REG_FUNC_ADDR ARMREG_R4
|
||||
#define REG_RETVAL ARMREG_R5
|
||||
#define REG_THIS ARMREG_R6
|
||||
#define REG_ARGP ARMREG_R7
|
||||
|
||||
|
||||
#define ARG_SIZE sizeof(stackval)
|
||||
|
||||
|
||||
|
||||
|
||||
void flush_icache ()
|
||||
{
|
||||
#if defined(_WIN32)
|
||||
FlushInstructionCache(GetCurrentProcess(), NULL, 0);
|
||||
#else
|
||||
# if 0
|
||||
asm ("mov r0, r0");
|
||||
asm ("mov r0, #0");
|
||||
asm ("mcr p15, 0, r0, c7, c7, 0");
|
||||
# else
|
||||
/* TODO: use (movnv pc, rx) method */
|
||||
# endif
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void* alloc_code_buff (int num_instr)
|
||||
{
|
||||
void* code_buff;
|
||||
int code_size = num_instr * sizeof(arminstr_t);
|
||||
|
||||
#if defined(_WIN32) || defined(UNDER_CE)
|
||||
int old_prot = 0;
|
||||
|
||||
code_buff = malloc(code_size);
|
||||
VirtualProtect(code_buff, code_size, PAGE_EXECUTE_READWRITE, &old_prot);
|
||||
#else
|
||||
int page_size = sysconf(_SC_PAGESIZE);
|
||||
int new_code_size;
|
||||
|
||||
new_code_size = code_size + page_size - 1;
|
||||
code_buff = malloc(new_code_size);
|
||||
code_buff = (void *) (((int) code_buff + page_size - 1) & ~(page_size - 1));
|
||||
|
||||
if (mprotect(code_buff, code_size, PROT_READ|PROT_WRITE|PROT_EXEC) != 0) {
|
||||
g_critical (G_GNUC_PRETTY_FUNCTION
|
||||
": mprotect error: %s", g_strerror (errno));
|
||||
}
|
||||
#endif
|
||||
|
||||
return code_buff;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Refer to ARM Procedure Call Standard (APCS) for more info.
|
||||
*/
|
||||
MonoPIFunc mono_arch_create_trampoline (MonoMethodSignature *sig, gboolean string_ctor)
|
||||
{
|
||||
MonoType* param;
|
||||
MonoPIFunc code_buff;
|
||||
arminstr_t* p;
|
||||
guint32 code_size, stack_size;
|
||||
guint32 simple_type;
|
||||
int i, hasthis, aregs, regc, stack_offs;
|
||||
int this_loaded;
|
||||
guchar reg_alloc [ARM_NUM_ARG_REGS];
|
||||
|
||||
/* pessimistic estimation for prologue/epilogue size */
|
||||
code_size = 16 + 16;
|
||||
/* push/pop work regs */
|
||||
code_size += 2;
|
||||
/* call */
|
||||
code_size += 2;
|
||||
/* handle retval */
|
||||
code_size += 2;
|
||||
|
||||
stack_size = 0;
|
||||
hasthis = sig->hasthis ? 1 : 0;
|
||||
|
||||
aregs = ARM_NUM_ARG_REGS - hasthis;
|
||||
|
||||
for (i = 0, regc = aregs; i < sig->param_count; ++i) {
|
||||
param = sig->params [i];
|
||||
|
||||
/* keep track of argument sizes */
|
||||
if (i < ARM_NUM_ARG_REGS) reg_alloc [i] = 0;
|
||||
|
||||
if (param->byref) {
|
||||
if (regc > 0) {
|
||||
code_size += 1;
|
||||
reg_alloc [i] = regc;
|
||||
--regc;
|
||||
} else {
|
||||
code_size += 2;
|
||||
stack_size += sizeof(gpointer);
|
||||
}
|
||||
} else {
|
||||
simple_type = param->type;
|
||||
enum_calc_size:
|
||||
switch (simple_type) {
|
||||
case MONO_TYPE_BOOLEAN:
|
||||
case MONO_TYPE_CHAR:
|
||||
case MONO_TYPE_I1:
|
||||
case MONO_TYPE_U1:
|
||||
case MONO_TYPE_I2:
|
||||
case MONO_TYPE_U2:
|
||||
case MONO_TYPE_I4:
|
||||
case MONO_TYPE_U4:
|
||||
case MONO_TYPE_I:
|
||||
case MONO_TYPE_U:
|
||||
case MONO_TYPE_PTR:
|
||||
case MONO_TYPE_R4:
|
||||
case MONO_TYPE_SZARRAY:
|
||||
case MONO_TYPE_CLASS:
|
||||
case MONO_TYPE_OBJECT:
|
||||
case MONO_TYPE_STRING:
|
||||
if (regc > 0) {
|
||||
/* register arg */
|
||||
code_size += 1;
|
||||
reg_alloc [i] = regc;
|
||||
--regc;
|
||||
} else {
|
||||
/* stack arg */
|
||||
code_size += 2;
|
||||
stack_size += 4;
|
||||
}
|
||||
break;
|
||||
case MONO_TYPE_I8:
|
||||
case MONO_TYPE_U8:
|
||||
case MONO_TYPE_R8:
|
||||
/* keep track of argument sizes */
|
||||
if (regc > 1) {
|
||||
/* fits into registers, two LDRs */
|
||||
code_size += 2;
|
||||
reg_alloc [i] = regc;
|
||||
regc -= 2;
|
||||
} else if (regc > 0) {
|
||||
/* first half fits into register, one LDR */
|
||||
code_size += 1;
|
||||
reg_alloc [i] = regc;
|
||||
--regc;
|
||||
/* the rest on the stack, LDR/STR */
|
||||
code_size += 2;
|
||||
stack_size += 4;
|
||||
} else {
|
||||
/* stack arg, 4 instrs - 2x(LDR/STR) */
|
||||
code_size += 4;
|
||||
stack_size += 2 * 4;
|
||||
}
|
||||
break;
|
||||
case MONO_TYPE_VALUETYPE:
|
||||
if (param->data.klass->enumtype) {
|
||||
simple_type = param->data.klass->enum_basetype->type;
|
||||
goto enum_calc_size;
|
||||
}
|
||||
|
||||
if (mono_class_value_size(param->data.klass, NULL) != 4) {
|
||||
g_error("can only marshal enums, not generic structures (size: %d)", mono_class_value_size(param->data.klass, NULL));
|
||||
}
|
||||
if (regc > 0) {
|
||||
/* register arg */
|
||||
code_size += 1;
|
||||
reg_alloc [i] = regc;
|
||||
--regc;
|
||||
} else {
|
||||
/* stack arg */
|
||||
code_size += 2;
|
||||
stack_size += 4;
|
||||
}
|
||||
break;
|
||||
default :
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
code_buff = (MonoPIFunc)alloc_code_buff(code_size);
|
||||
p = (arminstr_t*)code_buff;
|
||||
|
||||
/* prologue */
|
||||
p = arm_emit_lean_prologue(p, stack_size,
|
||||
/* save workset (r4-r7) */
|
||||
(1 << ARMREG_R4) | (1 << ARMREG_R5) | (1 << ARMREG_R6) | (1 << ARMREG_R7));
|
||||
|
||||
|
||||
/* copy args into workset */
|
||||
/* callme - always present */
|
||||
ARM_MOV_REG_REG(p, ARMREG_R4, ARMREG_A1);
|
||||
/* retval */
|
||||
if (sig->ret->byref || string_ctor || (sig->ret->type != MONO_TYPE_VOID)) {
|
||||
ARM_MOV_REG_REG(p, ARMREG_R5, ARMREG_A2);
|
||||
}
|
||||
/* this_obj */
|
||||
if (sig->hasthis) {
|
||||
this_loaded = 0;
|
||||
if (stack_size == 0) {
|
||||
ARM_MOV_REG_REG(p, ARMREG_A1, ARMREG_A3);
|
||||
this_loaded = 1;
|
||||
} else {
|
||||
ARM_MOV_REG_REG(p, ARMREG_R6, ARMREG_A3);
|
||||
}
|
||||
}
|
||||
/* args */
|
||||
if (sig->param_count != 0) {
|
||||
ARM_MOV_REG_REG(p, ARMREG_R7, ARMREG_A4);
|
||||
}
|
||||
|
||||
stack_offs = stack_size;
|
||||
|
||||
/* handle arguments */
|
||||
/* in reverse order so we could use r0 (arg1) for memory transfers */
|
||||
for (i = sig->param_count; --i >= 0;) {
|
||||
param = sig->params [i];
|
||||
if (param->byref) {
|
||||
if (i < aregs && reg_alloc[i] > 0) {
|
||||
ARM_LDR_IMM(p, ARMREG_A1 + i, REG_ARGP, i*ARG_SIZE);
|
||||
} else {
|
||||
stack_offs -= sizeof(armword_t);
|
||||
ARM_LDR_IMM(p, ARMREG_R0, REG_ARGP, i*ARG_SIZE);
|
||||
ARM_STR_IMM(p, ARMREG_R0, ARMREG_SP, stack_offs);
|
||||
}
|
||||
} else {
|
||||
simple_type = param->type;
|
||||
enum_marshal:
|
||||
switch (simple_type) {
|
||||
case MONO_TYPE_BOOLEAN:
|
||||
case MONO_TYPE_CHAR:
|
||||
case MONO_TYPE_I1:
|
||||
case MONO_TYPE_U1:
|
||||
case MONO_TYPE_I2:
|
||||
case MONO_TYPE_U2:
|
||||
case MONO_TYPE_I4:
|
||||
case MONO_TYPE_U4:
|
||||
case MONO_TYPE_I:
|
||||
case MONO_TYPE_U:
|
||||
case MONO_TYPE_PTR:
|
||||
case MONO_TYPE_R4:
|
||||
case MONO_TYPE_SZARRAY:
|
||||
case MONO_TYPE_CLASS:
|
||||
case MONO_TYPE_OBJECT:
|
||||
case MONO_TYPE_STRING:
|
||||
if (i < aregs && reg_alloc [i] > 0) {
|
||||
/* pass in register */
|
||||
ARM_LDR_IMM(p, ARMREG_A1 + hasthis + (aregs - reg_alloc [i]), REG_ARGP, i*ARG_SIZE);
|
||||
} else {
|
||||
stack_offs -= sizeof(armword_t);
|
||||
ARM_LDR_IMM(p, ARMREG_R0, REG_ARGP, i*ARG_SIZE);
|
||||
ARM_STR_IMM(p, ARMREG_R0, ARMREG_SP, stack_offs);
|
||||
}
|
||||
break;
|
||||
case MONO_TYPE_I8:
|
||||
case MONO_TYPE_U8:
|
||||
case MONO_TYPE_R8:
|
||||
if (i < aregs && reg_alloc [i] > 0) {
|
||||
if (reg_alloc [i] > 1) {
|
||||
/* pass in registers */
|
||||
ARM_LDR_IMM(p, ARMREG_A1 + hasthis + (aregs - reg_alloc [i]), REG_ARGP, i*ARG_SIZE);
|
||||
ARM_LDR_IMM(p, ARMREG_A1 + hasthis + (aregs - reg_alloc [i]) + 1, REG_ARGP, i*ARG_SIZE + 4);
|
||||
} else {
|
||||
stack_offs -= sizeof(armword_t);
|
||||
ARM_LDR_IMM(p, ARMREG_R0, REG_ARGP, i*ARG_SIZE + 4);
|
||||
ARM_STR_IMM(p, ARMREG_R0, ARMREG_SP, stack_offs);
|
||||
ARM_LDR_IMM(p, ARMREG_A1 + hasthis + (aregs - reg_alloc [i]), REG_ARGP, i*ARG_SIZE);
|
||||
}
|
||||
} else {
|
||||
/* two words transferred on the stack */
|
||||
stack_offs -= 2*sizeof(armword_t);
|
||||
ARM_LDR_IMM(p, ARMREG_R0, REG_ARGP, i*ARG_SIZE);
|
||||
ARM_STR_IMM(p, ARMREG_R0, ARMREG_SP, stack_offs);
|
||||
ARM_LDR_IMM(p, ARMREG_R0, REG_ARGP, i*ARG_SIZE + 4);
|
||||
ARM_STR_IMM(p, ARMREG_R0, ARMREG_SP, stack_offs + 4);
|
||||
}
|
||||
break;
|
||||
case MONO_TYPE_VALUETYPE:
|
||||
if (param->data.klass->enumtype) {
|
||||
/* it's an enum value, proceed based on its base type */
|
||||
simple_type = param->data.klass->enum_basetype->type;
|
||||
goto enum_marshal;
|
||||
} else {
|
||||
if (i < aregs && reg_alloc[i] > 0) {
|
||||
int vtreg = ARMREG_A1 + hasthis +
|
||||
hasthis + (aregs - reg_alloc[i]);
|
||||
ARM_LDR_IMM(p, vtreg, REG_ARGP, i * ARG_SIZE);
|
||||
ARM_LDR_IMM(p, vtreg, vtreg, 0);
|
||||
} else {
|
||||
stack_offs -= sizeof(armword_t);
|
||||
ARM_LDR_IMM(p, ARMREG_R0, REG_ARGP, i * ARG_SIZE);
|
||||
ARM_LDR_IMM(p, ARMREG_R0, ARMREG_R0, 0);
|
||||
ARM_STR_IMM(p, ARMREG_R0, ARMREG_SP, stack_offs);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (sig->hasthis && !this_loaded) {
|
||||
/* [this] always passed in A1, regardless of sig->call_convention */
|
||||
ARM_MOV_REG_REG(p, ARMREG_A1, REG_THIS);
|
||||
}
|
||||
|
||||
/* call [func] */
|
||||
ARM_MOV_REG_REG(p, ARMREG_LR, ARMREG_PC);
|
||||
ARM_MOV_REG_REG(p, ARMREG_PC, REG_FUNC_ADDR);
|
||||
|
||||
/* handle retval */
|
||||
if (sig->ret->byref || string_ctor) {
|
||||
ARM_STR_IMM(p, ARMREG_R0, REG_RETVAL, 0);
|
||||
} else {
|
||||
simple_type = sig->ret->type;
|
||||
enum_retvalue:
|
||||
switch (simple_type) {
|
||||
case MONO_TYPE_BOOLEAN:
|
||||
case MONO_TYPE_I1:
|
||||
case MONO_TYPE_U1:
|
||||
ARM_STRB_IMM(p, ARMREG_R0, REG_RETVAL, 0);
|
||||
break;
|
||||
case MONO_TYPE_CHAR:
|
||||
case MONO_TYPE_I2:
|
||||
case MONO_TYPE_U2:
|
||||
ARM_STRH_IMM(p, ARMREG_R0, REG_RETVAL, 0);
|
||||
break;
|
||||
/*
|
||||
* A 32-bit integer and integer-equivalent return value
|
||||
* is returned in R0.
|
||||
* Single-precision floating-point values are returned in R0.
|
||||
*/
|
||||
case MONO_TYPE_I:
|
||||
case MONO_TYPE_U:
|
||||
case MONO_TYPE_I4:
|
||||
case MONO_TYPE_U4:
|
||||
case MONO_TYPE_R4:
|
||||
case MONO_TYPE_OBJECT:
|
||||
case MONO_TYPE_CLASS:
|
||||
case MONO_TYPE_ARRAY:
|
||||
case MONO_TYPE_SZARRAY:
|
||||
case MONO_TYPE_STRING:
|
||||
ARM_STR_IMM(p, ARMREG_R0, REG_RETVAL, 0);
|
||||
break;
|
||||
/*
|
||||
* A 64-bit integer is returned in R0 and R1.
|
||||
* Double-precision floating-point values are returned in R0 and R1.
|
||||
*/
|
||||
case MONO_TYPE_I8:
|
||||
case MONO_TYPE_U8:
|
||||
case MONO_TYPE_R8:
|
||||
ARM_STR_IMM(p, ARMREG_R0, REG_RETVAL, 0);
|
||||
ARM_STR_IMM(p, ARMREG_R1, REG_RETVAL, 4);
|
||||
break;
|
||||
case MONO_TYPE_VALUETYPE:
|
||||
if (sig->ret->data.klass->enumtype) {
|
||||
simple_type = sig->ret->data.klass->enum_basetype->type;
|
||||
goto enum_retvalue;
|
||||
}
|
||||
break;
|
||||
case MONO_TYPE_VOID:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
p = arm_emit_std_epilogue(p, stack_size,
|
||||
/* restore R4-R7 */
|
||||
(1 << ARMREG_R4) | (1 << ARMREG_R5) | (1 << ARMREG_R6) | (1 << ARMREG_R7));
|
||||
|
||||
flush_icache();
|
||||
|
||||
#ifdef ARM_DUMP_DISASM
|
||||
_armdis_decode((arminstr_t*)code_buff, ((guint8*)p) - ((guint8*)code_buff));
|
||||
#endif
|
||||
|
||||
return code_buff;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#define MINV_OFFS(member) G_STRUCT_OFFSET(MonoInvocation, member)
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Returns a pointer to a native function that can be used to
|
||||
* call the specified method.
|
||||
* The function created will receive the arguments according
|
||||
* to the call convention specified in the method.
|
||||
* This function works by creating a MonoInvocation structure,
|
||||
* filling the fields in and calling ves_exec_method on it.
|
||||
* Still need to figure out how to handle the exception stuff
|
||||
* across the managed/unmanaged boundary.
|
||||
*/
|
||||
void* mono_arch_create_method_pointer (MonoMethod* method)
|
||||
{
|
||||
MonoMethodSignature* sig;
|
||||
guchar* p, * p_method, * p_stackval_from_data, * p_exec;
|
||||
void* code_buff;
|
||||
int i, stack_size, arg_pos, arg_add, stackval_pos, offs;
|
||||
int areg, reg_args, shift, pos;
|
||||
MonoJitInfo *ji;
|
||||
|
||||
code_buff = alloc_code_buff(128);
|
||||
p = (guchar*)code_buff;
|
||||
|
||||
sig = method->signature;
|
||||
|
||||
ARM_B(p, 3);
|
||||
|
||||
/* embed magic number followed by method pointer */
|
||||
*p++ = 'M';
|
||||
*p++ = 'o';
|
||||
*p++ = 'n';
|
||||
*p++ = 'o';
|
||||
/* method ptr */
|
||||
*(void**)p = method;
|
||||
p_method = p;
|
||||
p += 4;
|
||||
|
||||
/* call table */
|
||||
*(void**)p = stackval_from_data;
|
||||
p_stackval_from_data = p;
|
||||
p += 4;
|
||||
*(void**)p = ves_exec_method;
|
||||
p_exec = p;
|
||||
p += 4;
|
||||
|
||||
stack_size = sizeof(MonoInvocation) + ARG_SIZE*(sig->param_count + 1) + ARM_NUM_ARG_REGS*2*sizeof(armword_t);
|
||||
|
||||
/* prologue */
|
||||
p = (guchar*)arm_emit_lean_prologue((arminstr_t*)p, stack_size,
|
||||
(1 << ARMREG_R4) |
|
||||
(1 << ARMREG_R5) |
|
||||
(1 << ARMREG_R6) |
|
||||
(1 << ARMREG_R7));
|
||||
|
||||
/* R7 - ptr to stack args */
|
||||
ARM_MOV_REG_REG(p, ARMREG_R7, ARMREG_IP);
|
||||
|
||||
/*
|
||||
* Initialize MonoInvocation fields, first the ones known now.
|
||||
*/
|
||||
ARM_MOV_REG_IMM8(p, ARMREG_R4, 0);
|
||||
ARM_STR_IMM(p, ARMREG_R4, ARMREG_SP, MINV_OFFS(ex));
|
||||
ARM_STR_IMM(p, ARMREG_R4, ARMREG_SP, MINV_OFFS(ex_handler));
|
||||
ARM_STR_IMM(p, ARMREG_R4, ARMREG_SP, MINV_OFFS(parent));
|
||||
|
||||
/* Set the method pointer. */
|
||||
ARM_LDR_IMM(p, ARMREG_R4, ARMREG_PC, -(int)(p - p_method + sizeof(arminstr_t)*2));
|
||||
ARM_STR_IMM(p, ARMREG_R4, ARMREG_SP, MINV_OFFS(method));
|
||||
|
||||
if (sig->hasthis) {
|
||||
/* [this] in A1 */
|
||||
ARM_STR_IMM(p, ARMREG_A1, ARMREG_SP, MINV_OFFS(obj));
|
||||
} else {
|
||||
/* else set minv.obj to NULL */
|
||||
ARM_STR_IMM(p, ARMREG_R4, ARMREG_SP, MINV_OFFS(obj));
|
||||
}
|
||||
|
||||
/* copy args from registers to stack */
|
||||
areg = ARMREG_A1 + sig->hasthis;
|
||||
arg_pos = -(int)(ARM_NUM_ARG_REGS - sig->hasthis) * 2 * sizeof(armword_t);
|
||||
arg_add = 0;
|
||||
for (i = 0; i < sig->param_count; ++i) {
|
||||
if (areg >= ARM_NUM_ARG_REGS) break;
|
||||
ARM_STR_IMM(p, areg, ARMREG_R7, arg_pos);
|
||||
++areg;
|
||||
if (!sig->params[i]->byref) {
|
||||
switch (sig->params[i]->type) {
|
||||
case MONO_TYPE_I8:
|
||||
case MONO_TYPE_U8:
|
||||
case MONO_TYPE_R8:
|
||||
if (areg >= ARM_NUM_ARG_REGS) {
|
||||
/* load second half of 64-bit arg */
|
||||
ARM_LDR_IMM(p, ARMREG_R4, ARMREG_R7, 0);
|
||||
ARM_STR_IMM(p, ARMREG_R4, ARMREG_R7, arg_pos + sizeof(armword_t));
|
||||
arg_add = sizeof(armword_t);
|
||||
} else {
|
||||
/* second half is already the register */
|
||||
ARM_STR_IMM(p, areg, ARMREG_R7, arg_pos + sizeof(armword_t));
|
||||
++areg;
|
||||
}
|
||||
break;
|
||||
case MONO_TYPE_VALUETYPE:
|
||||
/* assert */
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
arg_pos += 2 * sizeof(armword_t);
|
||||
}
|
||||
/* number of args passed in registers */
|
||||
reg_args = i;
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Calc and save stack args ptr,
|
||||
* args follow MonoInvocation struct on the stack.
|
||||
*/
|
||||
ARM_ADD_REG_IMM8(p, ARMREG_R1, ARMREG_SP, sizeof(MonoInvocation));
|
||||
ARM_STR_IMM(p, ARMREG_R1, ARMREG_SP, MINV_OFFS(stack_args));
|
||||
|
||||
/* convert method args to stackvals */
|
||||
arg_pos = -(int)(ARM_NUM_ARG_REGS - sig->hasthis) * 2 * sizeof(armword_t);
|
||||
stackval_pos = sizeof(MonoInvocation);
|
||||
for (i = 0; i < sig->param_count; ++i) {
|
||||
if (i < reg_args) {
|
||||
ARM_SUB_REG_IMM8(p, ARMREG_A3, ARMREG_R7, -arg_pos);
|
||||
arg_pos += 2 * sizeof(armword_t);
|
||||
} else {
|
||||
if (arg_pos < 0) arg_pos = 0;
|
||||
pos = arg_pos + arg_add;
|
||||
if (pos <= 0xFF) {
|
||||
ARM_ADD_REG_IMM8(p, ARMREG_A3, ARMREG_R7, pos);
|
||||
} else {
|
||||
if (is_arm_const((armword_t)pos)) {
|
||||
shift = calc_arm_mov_const_shift((armword_t)pos);
|
||||
ARM_ADD_REG_IMM(p, ARMREG_A3, ARMREG_R7, pos >> ((32 - shift) & 31), shift >> 1);
|
||||
} else {
|
||||
p = (guchar*)arm_mov_reg_imm32((arminstr_t*)p, ARMREG_R6, (armword_t)pos);
|
||||
ARM_ADD_REG_REG(p, ARMREG_A2, ARMREG_R7, ARMREG_R6);
|
||||
}
|
||||
}
|
||||
arg_pos += sizeof(armword_t);
|
||||
if (!sig->params[i]->byref) {
|
||||
switch (sig->params[i]->type) {
|
||||
case MONO_TYPE_I8:
|
||||
case MONO_TYPE_U8:
|
||||
case MONO_TYPE_R8:
|
||||
arg_pos += sizeof(armword_t);
|
||||
break;
|
||||
case MONO_TYPE_VALUETYPE:
|
||||
/* assert */
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* A2 = result */
|
||||
if (stackval_pos <= 0xFF) {
|
||||
ARM_ADD_REG_IMM8(p, ARMREG_A2, ARMREG_SP, stackval_pos);
|
||||
} else {
|
||||
if (is_arm_const((armword_t)stackval_pos)) {
|
||||
shift = calc_arm_mov_const_shift((armword_t)stackval_pos);
|
||||
ARM_ADD_REG_IMM(p, ARMREG_A2, ARMREG_SP, stackval_pos >> ((32 - shift) & 31), shift >> 1);
|
||||
} else {
|
||||
p = (guchar*)arm_mov_reg_imm32((arminstr_t*)p, ARMREG_R6, (armword_t)stackval_pos);
|
||||
ARM_ADD_REG_REG(p, ARMREG_A2, ARMREG_SP, ARMREG_R6);
|
||||
}
|
||||
}
|
||||
|
||||
/* A1 = type */
|
||||
p = (guchar*)arm_mov_reg_imm32((arminstr_t*)p, ARMREG_A1, (armword_t)sig->params [i]);
|
||||
|
||||
stackval_pos += ARG_SIZE;
|
||||
|
||||
offs = -(p + 2*sizeof(arminstr_t) - p_stackval_from_data);
|
||||
/* load function address */
|
||||
ARM_LDR_IMM(p, ARMREG_R4, ARMREG_PC, offs);
|
||||
/* call stackval_from_data */
|
||||
ARM_MOV_REG_REG(p, ARMREG_LR, ARMREG_PC);
|
||||
ARM_MOV_REG_REG(p, ARMREG_PC, ARMREG_R4);
|
||||
}
|
||||
|
||||
/* store retval ptr */
|
||||
p = (guchar*)arm_mov_reg_imm32((arminstr_t*)p, ARMREG_R5, (armword_t)stackval_pos);
|
||||
ARM_ADD_REG_REG(p, ARMREG_R5, ARMREG_SP, ARMREG_R4);
|
||||
ARM_STR_IMM(p, ARMREG_R5, ARMREG_SP, MINV_OFFS(retval));
|
||||
|
||||
/*
|
||||
* Call the method.
|
||||
*/
|
||||
/* A1 = MonoInvocation ptr */
|
||||
ARM_MOV_REG_REG(p, ARMREG_A1, ARMREG_SP);
|
||||
offs = -(p + 2*sizeof(arminstr_t) - p_exec);
|
||||
/* load function address */
|
||||
ARM_LDR_IMM(p, ARMREG_R4, ARMREG_PC, offs);
|
||||
/* call ves_exec */
|
||||
ARM_MOV_REG_REG(p, ARMREG_LR, ARMREG_PC);
|
||||
ARM_MOV_REG_REG(p, ARMREG_PC, ARMREG_R4);
|
||||
|
||||
|
||||
/*
|
||||
* Move retval into reg.
|
||||
*/
|
||||
if (sig->ret->byref) {
|
||||
ARM_LDR_IMM(p, ARMREG_R0, ARMREG_R5, 0);
|
||||
} else {
|
||||
switch (sig->ret->type) {
|
||||
case MONO_TYPE_BOOLEAN:
|
||||
case MONO_TYPE_I1:
|
||||
case MONO_TYPE_U1:
|
||||
ARM_LDRB_IMM(p, ARMREG_R0, ARMREG_R5, 0);
|
||||
break;
|
||||
case MONO_TYPE_CHAR:
|
||||
case MONO_TYPE_I2:
|
||||
case MONO_TYPE_U2:
|
||||
ARM_LDRH_IMM(p, ARMREG_R0, ARMREG_R5, 0);
|
||||
break;
|
||||
case MONO_TYPE_I:
|
||||
case MONO_TYPE_U:
|
||||
case MONO_TYPE_I4:
|
||||
case MONO_TYPE_U4:
|
||||
case MONO_TYPE_R4:
|
||||
case MONO_TYPE_OBJECT:
|
||||
case MONO_TYPE_CLASS:
|
||||
case MONO_TYPE_ARRAY:
|
||||
case MONO_TYPE_SZARRAY:
|
||||
ARM_LDR_IMM(p, ARMREG_R0, ARMREG_R5, 0);
|
||||
break;
|
||||
case MONO_TYPE_I8:
|
||||
case MONO_TYPE_U8:
|
||||
case MONO_TYPE_R8:
|
||||
ARM_LDR_IMM(p, ARMREG_R0, ARMREG_R5, 0);
|
||||
ARM_LDR_IMM(p, ARMREG_R1, ARMREG_R5, 4);
|
||||
break;
|
||||
case MONO_TYPE_VOID:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
p = (guchar*)arm_emit_std_epilogue((arminstr_t*)p, stack_size,
|
||||
(1 << ARMREG_R4) |
|
||||
(1 << ARMREG_R5) |
|
||||
(1 << ARMREG_R6) |
|
||||
(1 << ARMREG_R7));
|
||||
|
||||
flush_icache();
|
||||
|
||||
#ifdef ARM_DUMP_DISASM
|
||||
_armdis_decode((arminstr_t*)code_buff, ((guint8*)p) - ((guint8*)code_buff));
|
||||
#endif
|
||||
|
||||
ji = g_new0(MonoJitInfo, 1);
|
||||
ji->method = method;
|
||||
ji->code_size = ((guint8 *) p) - ((guint8 *) code_buff);
|
||||
ji->code_start = (gpointer) code_buff;
|
||||
|
||||
mono_jit_info_table_add(mono_get_root_domain (), ji);
|
||||
|
||||
return code_buff;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* mono_create_method_pointer () will insert a pointer to the MonoMethod
|
||||
* so that the interp can easily get at the data: this function will retrieve
|
||||
* the method from the code stream.
|
||||
*/
|
||||
MonoMethod* mono_method_pointer_get (void* code)
|
||||
{
|
||||
unsigned char* c = code;
|
||||
/* check out magic number that follows unconditional branch */
|
||||
if (c[4] == 'M' &&
|
||||
c[5] == 'o' &&
|
||||
c[6] == 'n' &&
|
||||
c[7] == 'o') return ((MonoMethod**)code)[2];
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
@@ -1,15 +0,0 @@
|
||||
/* -- <Op> -- */
|
||||
|
||||
|
||||
/* Fd := Fn <Op> Fm */
|
||||
#define ARM_VFP_<Op>D_COND(p, rd, rn, rm, cond) \
|
||||
ARM_EMIT((p), ARM_DEF_VFP_DYADIC(cond,ARM_VFP_COPROC_DOUBLE,ARM_VFP_<Op>,rd,rn,rm))
|
||||
#define ARM_VFP_<Op>D(p, rd, rn, rm) \
|
||||
ARM_VFP_<Op>D_COND(p, rd, rn, rm, ARMCOND_AL)
|
||||
|
||||
#define ARM_VFP_<Op>S_COND(p, rd, rn, rm, cond) \
|
||||
ARM_EMIT((p), ARM_DEF_VFP_DYADIC(cond,ARM_VFP_COPROC_SINGLE,ARM_VFP_<Op>,rd,rn,rm))
|
||||
#define ARM_VFP_<Op>S(p, rd, rn, rm) \
|
||||
ARM_VFP_<Op>S_COND(p, rd, rn, rm, ARMCOND_AL)
|
||||
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
/* -- <Op> -- */
|
||||
|
||||
|
||||
/* Fd := <Op> Fm */
|
||||
|
||||
#define ARM_<Op>D_COND(p,dreg,sreg,cond) \
|
||||
ARM_EMIT((p), ARM_DEF_VFP_MONADIC((cond),ARM_VFP_COPROC_DOUBLE,ARM_VFP_<Op>,(dreg),(sreg)))
|
||||
#define ARM_<Op>D(p,dreg,sreg) ARM_<Op>D_COND(p,dreg,sreg,ARMCOND_AL)
|
||||
|
||||
#define ARM_<Op>S_COND(p,dreg,sreg,cond) \
|
||||
ARM_EMIT((p), ARM_DEF_VFP_MONADIC((cond),ARM_VFP_COPROC_SINGLE,ARM_VFP_<Op>,(dreg),(sreg)))
|
||||
#define ARM_<Op>S(p,dreg,sreg) ARM_<Op>S_COND(p,dreg,sreg,ARMCOND_AL)
|
||||
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
DYADIC="ADD SUB MUL NMUL DIV"
|
||||
MONADIC="CPY ABS NEG SQRT CMP CMPE CMPZ CMPEZ CVT UITO SITO TOUI TOSI TOUIZ TOSIZ"
|
||||
|
||||
# $1: opcode list
|
||||
# $2: template
|
||||
gen() {
|
||||
for i in $1; do
|
||||
sed "s/<Op>/$i/g" $2.th
|
||||
done
|
||||
}
|
||||
|
||||
echo -e "/* Macros for VFP ops, auto-generated from template */\n"
|
||||
|
||||
echo -e "\n/* dyadic */\n"
|
||||
gen "$DYADIC" vfp_macros
|
||||
|
||||
echo -e "\n/* monadic */\n"
|
||||
gen "$MONADIC" vfpm_macros
|
||||
|
||||
echo -e "\n\n"
|
||||
|
||||
echo -e "\n/* end generated */\n"
|
||||
6
FFTS/Sources/FFTS/src/arch/arm64/.gitignore
vendored
6
FFTS/Sources/FFTS/src/arch/arm64/.gitignore
vendored
@@ -1,6 +0,0 @@
|
||||
/
|
||||
/Makefile
|
||||
/Makefile.in
|
||||
/*.o
|
||||
/*.lo
|
||||
/.deps
|
||||
@@ -1,3 +0,0 @@
|
||||
#include "../../../../mono-extensions/mono/arch/arm64/arm64-codegen.h"
|
||||
|
||||
|
||||
2
FFTS/Sources/FFTS/src/arch/ia64/.gitignore
vendored
2
FFTS/Sources/FFTS/src/arch/ia64/.gitignore
vendored
@@ -1,2 +0,0 @@
|
||||
/Makefile
|
||||
/Makefile.in
|
||||
@@ -1,3 +0,0 @@
|
||||
EXTRA_DIST = ia64-codegen.h
|
||||
|
||||
|
||||
@@ -1,861 +0,0 @@
|
||||
/*
|
||||
* codegen.c: Tests for the IA64 code generation macros
|
||||
*/
|
||||
|
||||
#include <glib.h>
|
||||
#include <stdio.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#define IA64_SIMPLE_EMIT_BUNDLE
|
||||
|
||||
#include <mono/arch/ia64/ia64-codegen.h>
|
||||
|
||||
void
|
||||
mono_disassemble_code (guint8 *code, int size, char *id)
|
||||
{
|
||||
int i;
|
||||
FILE *ofd;
|
||||
const char *tmp = g_get_tmp_dir ();
|
||||
const char *objdump_args = g_getenv ("MONO_OBJDUMP_ARGS");
|
||||
char *as_file;
|
||||
char *o_file;
|
||||
char *cmd;
|
||||
|
||||
as_file = g_strdup_printf ("%s/test.s", tmp);
|
||||
|
||||
if (!(ofd = fopen (as_file, "w")))
|
||||
g_assert_not_reached ();
|
||||
|
||||
for (i = 0; id [i]; ++i) {
|
||||
if (!isalnum (id [i]))
|
||||
fprintf (ofd, "_");
|
||||
else
|
||||
fprintf (ofd, "%c", id [i]);
|
||||
}
|
||||
fprintf (ofd, ":\n");
|
||||
|
||||
for (i = 0; i < size; ++i)
|
||||
fprintf (ofd, ".byte %d\n", (unsigned int) code [i]);
|
||||
|
||||
fclose (ofd);
|
||||
|
||||
#ifdef __ia64__
|
||||
#define DIS_CMD "objdump -d"
|
||||
#define AS_CMD "as"
|
||||
#else
|
||||
#define DIS_CMD "ia64-linux-gnu-objdump -d"
|
||||
#define AS_CMD "ia64-linux-gnu-as"
|
||||
#endif
|
||||
|
||||
o_file = g_strdup_printf ("%s/test.o", tmp);
|
||||
cmd = g_strdup_printf (AS_CMD " %s -o %s", as_file, o_file);
|
||||
system (cmd);
|
||||
g_free (cmd);
|
||||
if (!objdump_args)
|
||||
objdump_args = "";
|
||||
|
||||
cmd = g_strdup_printf (DIS_CMD " %s %s", objdump_args, o_file);
|
||||
system (cmd);
|
||||
g_free (cmd);
|
||||
|
||||
g_free (o_file);
|
||||
g_free (as_file);
|
||||
}
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
Ia64CodegenState code;
|
||||
|
||||
guint8 *buf = g_malloc0 (40960);
|
||||
|
||||
ia64_codegen_init (code, buf);
|
||||
|
||||
ia64_add (code, 1, 2, 3);
|
||||
ia64_add1 (code, 1, 2, 3);
|
||||
ia64_sub (code, 1, 2, 3);
|
||||
ia64_sub1 (code, 1, 2, 3);
|
||||
ia64_addp4 (code, 1, 2, 3);
|
||||
ia64_and (code, 1, 2, 3);
|
||||
ia64_andcm (code, 1, 2, 3);
|
||||
ia64_or (code, 1, 2, 3);
|
||||
ia64_xor (code, 1, 2, 3);
|
||||
ia64_shladd (code, 1, 2, 3, 4);
|
||||
ia64_shladdp4 (code, 1, 2, 3, 4);
|
||||
ia64_sub_imm (code, 1, 0x7f, 2);
|
||||
ia64_sub_imm (code, 1, -1, 2);
|
||||
ia64_and_imm (code, 1, -128, 2);
|
||||
ia64_andcm_imm (code, 1, -128, 2);
|
||||
ia64_or_imm (code, 1, -128, 2);
|
||||
ia64_xor_imm (code, 1, -128, 2);
|
||||
ia64_adds_imm (code, 1, 8191, 2);
|
||||
ia64_adds_imm (code, 1, -8192, 2);
|
||||
ia64_adds_imm (code, 1, 1234, 2);
|
||||
ia64_adds_imm (code, 1, -1234, 2);
|
||||
ia64_addp4_imm (code, 1, -1234, 2);
|
||||
ia64_addl_imm (code, 1, 1234, 2);
|
||||
ia64_addl_imm (code, 1, -1234, 2);
|
||||
ia64_addl_imm (code, 1, 2097151, 2);
|
||||
ia64_addl_imm (code, 1, -2097152, 2);
|
||||
|
||||
ia64_cmp_lt (code, 1, 2, 1, 2);
|
||||
ia64_cmp_ltu (code, 1, 2, 1, 2);
|
||||
ia64_cmp_eq (code, 1, 2, 1, 2);
|
||||
ia64_cmp_lt_unc (code, 1, 2, 1, 2);
|
||||
ia64_cmp_ltu_unc (code, 1, 2, 1, 2);
|
||||
ia64_cmp_eq_unc (code, 1, 2, 1, 2);
|
||||
ia64_cmp_eq_and (code, 1, 2, 1, 2);
|
||||
ia64_cmp_eq_or (code, 1, 2, 1, 2);
|
||||
ia64_cmp_eq_or_andcm (code, 1, 2, 1, 2);
|
||||
ia64_cmp_ne_and (code, 1, 2, 1, 2);
|
||||
ia64_cmp_ne_or (code, 1, 2, 1, 2);
|
||||
ia64_cmp_ne_or_andcm (code, 1, 2, 1, 2);
|
||||
|
||||
ia64_cmp4_lt (code, 1, 2, 1, 2);
|
||||
ia64_cmp4_ltu (code, 1, 2, 1, 2);
|
||||
ia64_cmp4_eq (code, 1, 2, 1, 2);
|
||||
ia64_cmp4_lt_unc (code, 1, 2, 1, 2);
|
||||
ia64_cmp4_ltu_unc (code, 1, 2, 1, 2);
|
||||
ia64_cmp4_eq_unc (code, 1, 2, 1, 2);
|
||||
ia64_cmp4_eq_and (code, 1, 2, 1, 2);
|
||||
ia64_cmp4_eq_or (code, 1, 2, 1, 2);
|
||||
ia64_cmp4_eq_or_andcm (code, 1, 2, 1, 2);
|
||||
ia64_cmp4_ne_and (code, 1, 2, 1, 2);
|
||||
ia64_cmp4_ne_or (code, 1, 2, 1, 2);
|
||||
ia64_cmp4_ne_or_andcm (code, 1, 2, 1, 2);
|
||||
|
||||
ia64_cmp_gt_and (code, 1, 2, 0, 2);
|
||||
ia64_cmp_gt_or (code, 1, 2, 0, 2);
|
||||
ia64_cmp_gt_or_andcm (code, 1, 2, 0, 2);
|
||||
ia64_cmp_le_and (code, 1, 2, 0, 2);
|
||||
ia64_cmp_le_or (code, 1, 2, 0, 2);
|
||||
ia64_cmp_le_or_andcm (code, 1, 2, 0, 2);
|
||||
ia64_cmp_ge_and (code, 1, 2, 0, 2);
|
||||
ia64_cmp_ge_or (code, 1, 2, 0, 2);
|
||||
ia64_cmp_ge_or_andcm (code, 1, 2, 0, 2);
|
||||
ia64_cmp_lt_and (code, 1, 2, 0, 2);
|
||||
ia64_cmp_lt_or (code, 1, 2, 0, 2);
|
||||
ia64_cmp_lt_or_andcm (code, 1, 2, 0, 2);
|
||||
|
||||
ia64_cmp4_gt_and (code, 1, 2, 0, 2);
|
||||
ia64_cmp4_gt_or (code, 1, 2, 0, 2);
|
||||
ia64_cmp4_gt_or_andcm (code, 1, 2, 0, 2);
|
||||
ia64_cmp4_le_and (code, 1, 2, 0, 2);
|
||||
ia64_cmp4_le_or (code, 1, 2, 0, 2);
|
||||
ia64_cmp4_le_or_andcm (code, 1, 2, 0, 2);
|
||||
ia64_cmp4_ge_and (code, 1, 2, 0, 2);
|
||||
ia64_cmp4_ge_or (code, 1, 2, 0, 2);
|
||||
ia64_cmp4_ge_or_andcm (code, 1, 2, 0, 2);
|
||||
ia64_cmp4_lt_and (code, 1, 2, 0, 2);
|
||||
ia64_cmp4_lt_or (code, 1, 2, 0, 2);
|
||||
ia64_cmp4_lt_or_andcm (code, 1, 2, 0, 2);
|
||||
|
||||
ia64_cmp_lt_imm (code, 1, 2, 127, 2);
|
||||
ia64_cmp_lt_imm (code, 1, 2, -128, 2);
|
||||
|
||||
ia64_cmp_lt_imm (code, 1, 2, -128, 2);
|
||||
ia64_cmp_ltu_imm (code, 1, 2, -128, 2);
|
||||
ia64_cmp_eq_imm (code, 1, 2, -128, 2);
|
||||
ia64_cmp_lt_unc_imm (code, 1, 2, -128, 2);
|
||||
ia64_cmp_ltu_unc_imm (code, 1, 2, -128, 2);
|
||||
ia64_cmp_eq_unc_imm (code, 1, 2, -128, 2);
|
||||
ia64_cmp_eq_and_imm (code, 1, 2, -128, 2);
|
||||
ia64_cmp_eq_or_imm (code, 1, 2, -128, 2);
|
||||
ia64_cmp_eq_unc_imm (code, 1, 2, -128, 2);
|
||||
ia64_cmp_ne_and_imm (code, 1, 2, -128, 2);
|
||||
ia64_cmp_ne_or_imm (code, 1, 2, -128, 2);
|
||||
ia64_cmp_ne_or_andcm_imm (code, 1, 2, -128, 2);
|
||||
|
||||
ia64_cmp4_lt_imm (code, 1, 2, -128, 2);
|
||||
ia64_cmp4_ltu_imm (code, 1, 2, -128, 2);
|
||||
ia64_cmp4_eq_imm (code, 1, 2, -128, 2);
|
||||
ia64_cmp4_lt_unc_imm (code, 1, 2, -128, 2);
|
||||
ia64_cmp4_ltu_unc_imm (code, 1, 2, -128, 2);
|
||||
ia64_cmp4_eq_unc_imm (code, 1, 2, -128, 2);
|
||||
ia64_cmp4_eq_and_imm (code, 1, 2, -128, 2);
|
||||
ia64_cmp4_eq_or_imm (code, 1, 2, -128, 2);
|
||||
ia64_cmp4_eq_unc_imm (code, 1, 2, -128, 2);
|
||||
ia64_cmp4_ne_and_imm (code, 1, 2, -128, 2);
|
||||
ia64_cmp4_ne_or_imm (code, 1, 2, -128, 2);
|
||||
ia64_cmp4_ne_or_andcm_imm (code, 1, 2, -128, 2);
|
||||
|
||||
ia64_padd1 (code, 1, 2, 3);
|
||||
ia64_padd2 (code, 1, 2, 3);
|
||||
ia64_padd4 (code, 1, 2, 3);
|
||||
ia64_padd1_sss (code, 1, 2, 3);
|
||||
ia64_padd2_sss (code, 1, 2, 3);
|
||||
ia64_padd1_uuu (code, 1, 2, 3);
|
||||
ia64_padd2_uuu (code, 1, 2, 3);
|
||||
ia64_padd1_uus (code, 1, 2, 3);
|
||||
ia64_padd2_uus (code, 1, 2, 3);
|
||||
|
||||
ia64_psub1 (code, 1, 2, 3);
|
||||
ia64_psub2 (code, 1, 2, 3);
|
||||
ia64_psub4 (code, 1, 2, 3);
|
||||
ia64_psub1_sss (code, 1, 2, 3);
|
||||
ia64_psub2_sss (code, 1, 2, 3);
|
||||
ia64_psub1_uuu (code, 1, 2, 3);
|
||||
ia64_psub2_uuu (code, 1, 2, 3);
|
||||
ia64_psub1_uus (code, 1, 2, 3);
|
||||
ia64_psub2_uus (code, 1, 2, 3);
|
||||
|
||||
ia64_pavg1 (code, 1, 2, 3);
|
||||
ia64_pavg2 (code, 1, 2, 3);
|
||||
ia64_pavg1_raz (code, 1, 2, 3);
|
||||
ia64_pavg2_raz (code, 1, 2, 3);
|
||||
ia64_pavgsub1 (code, 1, 2, 3);
|
||||
ia64_pavgsub2 (code, 1, 2, 3);
|
||||
ia64_pcmp1_eq (code, 1, 2, 3);
|
||||
ia64_pcmp2_eq (code, 1, 2, 3);
|
||||
ia64_pcmp4_eq (code, 1, 2, 3);
|
||||
ia64_pcmp1_gt (code, 1, 2, 3);
|
||||
ia64_pcmp2_gt (code, 1, 2, 3);
|
||||
ia64_pcmp4_gt (code, 1, 2, 3);
|
||||
|
||||
ia64_pshladd2 (code, 1, 2, 3, 4);
|
||||
ia64_pshradd2 (code, 1, 2, 3, 4);
|
||||
|
||||
ia64_pmpyshr2 (code, 1, 2, 3, 0);
|
||||
ia64_pmpyshr2_u (code, 1, 2, 3, 0);
|
||||
ia64_pmpyshr2 (code, 1, 2, 3, 7);
|
||||
ia64_pmpyshr2_u (code, 1, 2, 3, 7);
|
||||
ia64_pmpyshr2 (code, 1, 2, 3, 15);
|
||||
ia64_pmpyshr2_u (code, 1, 2, 3, 15);
|
||||
ia64_pmpyshr2 (code, 1, 2, 3, 16);
|
||||
ia64_pmpyshr2_u (code, 1, 2, 3, 16);
|
||||
|
||||
ia64_pmpy2_r (code, 1, 2, 3);
|
||||
ia64_pmpy2_l (code, 1, 2, 3);
|
||||
ia64_mix1_r (code, 1, 2, 3);
|
||||
ia64_mix2_r (code, 1, 2, 3);
|
||||
ia64_mix4_r (code, 1, 2, 3);
|
||||
ia64_mix1_l (code, 1, 2, 3);
|
||||
ia64_mix2_l (code, 1, 2, 3);
|
||||
ia64_mix4_l (code, 1, 2, 3);
|
||||
ia64_pack2_uss (code, 1, 2, 3);
|
||||
ia64_pack2_sss (code, 1, 2, 3);
|
||||
ia64_pack4_sss (code, 1, 2, 3);
|
||||
ia64_unpack1_h (code, 1, 2, 3);
|
||||
ia64_unpack2_h (code, 1, 2, 3);
|
||||
ia64_unpack4_h (code, 1, 2, 3);
|
||||
ia64_unpack1_l (code, 1, 2, 3);
|
||||
ia64_unpack2_l (code, 1, 2, 3);
|
||||
ia64_unpack4_l (code, 1, 2, 3);
|
||||
ia64_pmin1_u (code, 1, 2, 3);
|
||||
ia64_pmax1_u (code, 1, 2, 3);
|
||||
ia64_pmin2 (code, 1, 2, 3);
|
||||
ia64_pmax2 (code, 1, 2, 3);
|
||||
ia64_psad1 (code, 1, 2, 3);
|
||||
|
||||
ia64_mux1 (code, 1, 2, IA64_MUX1_BRCST);
|
||||
ia64_mux1 (code, 1, 2, IA64_MUX1_MIX);
|
||||
ia64_mux1 (code, 1, 2, IA64_MUX1_SHUF);
|
||||
ia64_mux1 (code, 1, 2, IA64_MUX1_ALT);
|
||||
ia64_mux1 (code, 1, 2, IA64_MUX1_REV);
|
||||
|
||||
ia64_mux2 (code, 1, 2, 0x8d);
|
||||
|
||||
ia64_pshr2 (code, 1, 2, 3);
|
||||
ia64_pshr4 (code, 1, 2, 3);
|
||||
ia64_shr (code, 1, 2, 3);
|
||||
ia64_pshr2_u (code, 1, 2, 3);
|
||||
ia64_pshr4_u (code, 1, 2, 3);
|
||||
ia64_shr_u (code, 1, 2, 3);
|
||||
|
||||
ia64_pshr2_imm (code, 1, 2, 20);
|
||||
ia64_pshr4_imm (code, 1, 2, 20);
|
||||
ia64_pshr2_u_imm (code, 1, 2, 20);
|
||||
ia64_pshr4_u_imm (code, 1, 2, 20);
|
||||
|
||||
ia64_pshl2 (code, 1, 2, 3);
|
||||
ia64_pshl4 (code, 1, 2, 3);
|
||||
ia64_shl (code, 1, 2, 3);
|
||||
|
||||
ia64_pshl2_imm (code, 1, 2, 20);
|
||||
ia64_pshl4_imm (code, 1, 2, 20);
|
||||
|
||||
ia64_popcnt (code, 1, 2);
|
||||
|
||||
ia64_shrp (code, 1, 2, 3, 62);
|
||||
|
||||
ia64_extr_u (code, 1, 2, 62, 61);
|
||||
ia64_extr (code, 1, 2, 62, 61);
|
||||
|
||||
ia64_dep_z (code, 1, 2, 62, 61);
|
||||
|
||||
ia64_dep_z_imm (code, 1, 127, 62, 61);
|
||||
ia64_dep_z_imm (code, 1, -128, 62, 61);
|
||||
ia64_dep_imm (code, 1, 0, 2, 62, 61);
|
||||
ia64_dep_imm (code, 1, -1, 2, 62, 61);
|
||||
ia64_dep (code, 1, 2, 3, 10, 15);
|
||||
|
||||
ia64_tbit_z (code, 1, 2, 3, 0);
|
||||
|
||||
ia64_tbit_z (code, 1, 2, 3, 63);
|
||||
ia64_tbit_z_unc (code, 1, 2, 3, 63);
|
||||
ia64_tbit_z_and (code, 1, 2, 3, 63);
|
||||
ia64_tbit_nz_and (code, 1, 2, 3, 63);
|
||||
ia64_tbit_z_or (code, 1, 2, 3, 63);
|
||||
ia64_tbit_nz_or (code, 1, 2, 3, 63);
|
||||
ia64_tbit_z_or_andcm (code, 1, 2, 3, 63);
|
||||
ia64_tbit_nz_or_andcm (code, 1, 2, 3, 63);
|
||||
|
||||
ia64_tnat_z (code, 1, 2, 3);
|
||||
ia64_tnat_z_unc (code, 1, 2, 3);
|
||||
ia64_tnat_z_and (code, 1, 2, 3);
|
||||
ia64_tnat_nz_and (code, 1, 2, 3);
|
||||
ia64_tnat_z_or (code, 1, 2, 3);
|
||||
ia64_tnat_nz_or (code, 1, 2, 3);
|
||||
ia64_tnat_z_or_andcm (code, 1, 2, 3);
|
||||
ia64_tnat_nz_or_andcm (code, 1, 2, 3);
|
||||
|
||||
ia64_nop_i (code, 0x1234);
|
||||
ia64_hint_i (code, 0x1234);
|
||||
|
||||
ia64_break_i (code, 0x1234);
|
||||
|
||||
ia64_chk_s_i (code, 1, 0);
|
||||
ia64_chk_s_i (code, 1, -1);
|
||||
ia64_chk_s_i (code, 1, 1);
|
||||
|
||||
ia64_mov_to_br_hint (code, 1, 1, -1, IA64_MOV_TO_BR_WH_NONE, 0);
|
||||
ia64_mov_to_br_hint (code, 1, 1, -1, IA64_MOV_TO_BR_WH_SPTK, 0);
|
||||
ia64_mov_to_br_hint (code, 1, 1, -1, IA64_MOV_TO_BR_WH_DPTK, 0);
|
||||
ia64_mov_to_br_hint (code, 1, 1, -1, IA64_MOV_TO_BR_WH_DPTK, IA64_BR_IH_IMP);
|
||||
ia64_mov_ret_to_br_hint (code, 1, 1, -1, IA64_MOV_TO_BR_WH_NONE, 0);
|
||||
|
||||
ia64_mov_from_br (code, 1, 1);
|
||||
|
||||
ia64_mov_to_pred (code, 1, 0xfe);
|
||||
|
||||
ia64_mov_to_pred_rot_imm (code, 0xff0000);
|
||||
|
||||
ia64_mov_from_ip (code, 1);
|
||||
ia64_mov_from_pred (code, 1);
|
||||
|
||||
ia64_mov_to_ar_i (code, 1, 1);
|
||||
|
||||
ia64_mov_to_ar_imm_i (code, 1, 127);
|
||||
|
||||
ia64_mov_from_ar_i (code, 1, 1);
|
||||
|
||||
ia64_zxt1 (code, 1, 2);
|
||||
ia64_zxt2 (code, 1, 2);
|
||||
ia64_zxt4 (code, 1, 2);
|
||||
ia64_sxt1 (code, 1, 2);
|
||||
ia64_sxt2 (code, 1, 2);
|
||||
ia64_sxt4 (code, 1, 2);
|
||||
|
||||
ia64_czx1_l (code, 1, 2);
|
||||
ia64_czx2_l (code, 1, 2);
|
||||
ia64_czx1_r (code, 1, 2);
|
||||
ia64_czx2_r (code, 1, 2);
|
||||
|
||||
ia64_ld1_hint (code, 1, 2, IA64_LD_HINT_NONE);
|
||||
ia64_ld1_hint (code, 1, 2, IA64_LD_HINT_NT1);
|
||||
ia64_ld1_hint (code, 1, 2, IA64_LD_HINT_NTA);
|
||||
|
||||
ia64_ld1_hint (code, 1, 2, 0);
|
||||
ia64_ld2_hint (code, 1, 2, 0);
|
||||
ia64_ld4_hint (code, 1, 2, 0);
|
||||
ia64_ld8_hint (code, 1, 2, 0);
|
||||
|
||||
ia64_ld1_s_hint (code, 1, 2, 0);
|
||||
ia64_ld2_s_hint (code, 1, 2, 0);
|
||||
ia64_ld4_s_hint (code, 1, 2, 0);
|
||||
ia64_ld8_s_hint (code, 1, 2, 0);
|
||||
|
||||
ia64_ld1_a_hint (code, 1, 2, 0);
|
||||
ia64_ld2_a_hint (code, 1, 2, 0);
|
||||
ia64_ld4_a_hint (code, 1, 2, 0);
|
||||
ia64_ld8_a_hint (code, 1, 2, 0);
|
||||
|
||||
ia64_ld1_sa_hint (code, 1, 2, 0);
|
||||
ia64_ld2_sa_hint (code, 1, 2, 0);
|
||||
ia64_ld4_sa_hint (code, 1, 2, 0);
|
||||
ia64_ld8_sa_hint (code, 1, 2, 0);
|
||||
|
||||
ia64_ld1_bias_hint (code, 1, 2, 0);
|
||||
ia64_ld2_bias_hint (code, 1, 2, 0);
|
||||
ia64_ld4_bias_hint (code, 1, 2, 0);
|
||||
ia64_ld8_bias_hint (code, 1, 2, 0);
|
||||
|
||||
ia64_ld1_inc_hint (code, 1, 2, 3, IA64_LD_HINT_NONE);
|
||||
|
||||
ia64_ld1_inc_imm_hint (code, 1, 2, 255, IA64_LD_HINT_NONE);
|
||||
ia64_ld1_inc_imm_hint (code, 1, 2, -256, IA64_LD_HINT_NONE);
|
||||
|
||||
ia64_st1_hint (code, 1, 2, IA64_ST_HINT_NTA);
|
||||
|
||||
ia64_st1_hint (code, 1, 2, IA64_ST_HINT_NONE);
|
||||
ia64_st2_hint (code, 1, 2, IA64_ST_HINT_NONE);
|
||||
ia64_st4_hint (code, 1, 2, IA64_ST_HINT_NONE);
|
||||
ia64_st8_hint (code, 1, 2, IA64_ST_HINT_NONE);
|
||||
|
||||
ia64_st1_rel_hint (code, 1, 2, IA64_ST_HINT_NONE);
|
||||
ia64_st2_rel_hint (code, 1, 2, IA64_ST_HINT_NONE);
|
||||
ia64_st4_rel_hint (code, 1, 2, IA64_ST_HINT_NONE);
|
||||
ia64_st8_rel_hint (code, 1, 2, IA64_ST_HINT_NONE);
|
||||
|
||||
ia64_st8_spill_hint (code, 1, 2, IA64_ST_HINT_NONE);
|
||||
|
||||
ia64_st16_hint (code, 1, 2, IA64_ST_HINT_NONE);
|
||||
ia64_st16_rel_hint (code, 1, 2, IA64_ST_HINT_NONE);
|
||||
|
||||
ia64_st1_inc_imm_hint (code, 1, 2, 255, IA64_ST_HINT_NONE);
|
||||
ia64_st2_inc_imm_hint (code, 1, 2, 255, IA64_ST_HINT_NONE);
|
||||
ia64_st4_inc_imm_hint (code, 1, 2, 255, IA64_ST_HINT_NONE);
|
||||
ia64_st8_inc_imm_hint (code, 1, 2, 255, IA64_ST_HINT_NONE);
|
||||
|
||||
ia64_st1_rel_inc_imm_hint (code, 1, 2, 255, IA64_ST_HINT_NONE);
|
||||
ia64_st2_rel_inc_imm_hint (code, 1, 2, 255, IA64_ST_HINT_NONE);
|
||||
ia64_st4_rel_inc_imm_hint (code, 1, 2, 255, IA64_ST_HINT_NONE);
|
||||
ia64_st8_rel_inc_imm_hint (code, 1, 2, 255, IA64_ST_HINT_NONE);
|
||||
|
||||
ia64_st8_spill_inc_imm_hint (code, 1, 2, 255, IA64_ST_HINT_NONE);
|
||||
|
||||
ia64_ldfs_hint (code, 1, 2, 0);
|
||||
ia64_ldfd_hint (code, 1, 2, 0);
|
||||
ia64_ldf8_hint (code, 1, 2, 0);
|
||||
ia64_ldfe_hint (code, 1, 2, 0);
|
||||
|
||||
ia64_ldfs_s_hint (code, 1, 2, 0);
|
||||
ia64_ldfd_s_hint (code, 1, 2, 0);
|
||||
ia64_ldf8_s_hint (code, 1, 2, 0);
|
||||
ia64_ldfe_s_hint (code, 1, 2, 0);
|
||||
|
||||
ia64_ldfs_a_hint (code, 1, 2, 0);
|
||||
ia64_ldfd_a_hint (code, 1, 2, 0);
|
||||
ia64_ldf8_a_hint (code, 1, 2, 0);
|
||||
ia64_ldfe_a_hint (code, 1, 2, 0);
|
||||
|
||||
ia64_ldfs_sa_hint (code, 1, 2, 0);
|
||||
ia64_ldfd_sa_hint (code, 1, 2, 0);
|
||||
ia64_ldf8_sa_hint (code, 1, 2, 0);
|
||||
ia64_ldfe_sa_hint (code, 1, 2, 0);
|
||||
|
||||
ia64_ldfs_c_clr_hint (code, 1, 2, 0);
|
||||
ia64_ldfd_c_clr_hint (code, 1, 2, 0);
|
||||
ia64_ldf8_c_clr_hint (code, 1, 2, 0);
|
||||
ia64_ldfe_c_clr_hint (code, 1, 2, 0);
|
||||
|
||||
ia64_ldfs_c_nc_hint (code, 1, 2, 0);
|
||||
ia64_ldfd_c_nc_hint (code, 1, 2, 0);
|
||||
ia64_ldf8_c_nc_hint (code, 1, 2, 0);
|
||||
ia64_ldfe_c_nc_hint (code, 1, 2, 0);
|
||||
|
||||
ia64_ldf_fill_hint (code, 1, 2, 0);
|
||||
|
||||
ia64_ldfs_inc_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldfd_inc_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldf8_inc_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldfe_inc_hint (code, 1, 2, 3, 0);
|
||||
|
||||
ia64_ldfs_s_inc_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldfd_s_inc_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldf8_s_inc_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldfe_s_inc_hint (code, 1, 2, 3, 0);
|
||||
|
||||
ia64_ldfs_a_inc_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldfd_a_inc_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldf8_a_inc_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldfe_a_inc_hint (code, 1, 2, 3, 0);
|
||||
|
||||
ia64_ldfs_sa_inc_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldfd_sa_inc_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldf8_sa_inc_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldfe_sa_inc_hint (code, 1, 2, 3, 0);
|
||||
|
||||
ia64_ldfs_c_clr_inc_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldfd_c_clr_inc_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldf8_c_clr_inc_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldfe_c_clr_inc_hint (code, 1, 2, 3, 0);
|
||||
|
||||
ia64_ldfs_c_nc_inc_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldfd_c_nc_inc_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldf8_c_nc_inc_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldfe_c_nc_inc_hint (code, 1, 2, 3, 0);
|
||||
|
||||
ia64_ldf_fill_inc_hint (code, 1, 2, 3, 0);
|
||||
|
||||
ia64_ldfs_inc_imm_hint (code, 1, 2, 255, 0);
|
||||
ia64_ldfd_inc_imm_hint (code, 1, 2, 255, 0);
|
||||
ia64_ldf8_inc_imm_hint (code, 1, 2, 255, 0);
|
||||
ia64_ldfe_inc_imm_hint (code, 1, 2, 255, 0);
|
||||
|
||||
ia64_ldfs_s_inc_imm_hint (code, 1, 2, 255, 0);
|
||||
ia64_ldfd_s_inc_imm_hint (code, 1, 2, 255, 0);
|
||||
ia64_ldf8_s_inc_imm_hint (code, 1, 2, 255, 0);
|
||||
ia64_ldfe_s_inc_imm_hint (code, 1, 2, 255, 0);
|
||||
|
||||
ia64_ldfs_a_inc_imm_hint (code, 1, 2, 255, 0);
|
||||
ia64_ldfd_a_inc_imm_hint (code, 1, 2, 255, 0);
|
||||
ia64_ldf8_a_inc_imm_hint (code, 1, 2, 255, 0);
|
||||
ia64_ldfe_a_inc_imm_hint (code, 1, 2, 255, 0);
|
||||
|
||||
ia64_ldfs_sa_inc_imm_hint (code, 1, 2, 255, 0);
|
||||
ia64_ldfd_sa_inc_imm_hint (code, 1, 2, 255, 0);
|
||||
ia64_ldf8_sa_inc_imm_hint (code, 1, 2, 255, 0);
|
||||
ia64_ldfe_sa_inc_imm_hint (code, 1, 2, 255, 0);
|
||||
|
||||
ia64_ldfs_c_clr_inc_imm_hint (code, 1, 2, 255, 0);
|
||||
ia64_ldfd_c_clr_inc_imm_hint (code, 1, 2, 255, 0);
|
||||
ia64_ldf8_c_clr_inc_imm_hint (code, 1, 2, 255, 0);
|
||||
ia64_ldfe_c_clr_inc_imm_hint (code, 1, 2, 255, 0);
|
||||
|
||||
ia64_ldfs_c_nc_inc_imm_hint (code, 1, 2, 255, 0);
|
||||
ia64_ldfd_c_nc_inc_imm_hint (code, 1, 2, 255, 0);
|
||||
ia64_ldf8_c_nc_inc_imm_hint (code, 1, 2, 255, 0);
|
||||
ia64_ldfe_c_nc_inc_imm_hint (code, 1, 2, 255, 0);
|
||||
|
||||
ia64_ldf_fill_inc_imm_hint (code, 1, 2, 255, 0);
|
||||
|
||||
ia64_stfs_hint (code, 1, 2, 0);
|
||||
ia64_stfd_hint (code, 1, 2, 0);
|
||||
ia64_stf8_hint (code, 1, 2, 0);
|
||||
ia64_stfe_hint (code, 1, 2, 0);
|
||||
|
||||
ia64_stf_spill_hint (code, 1, 2, 0);
|
||||
|
||||
ia64_stfs_inc_imm_hint (code, 1, 2, 255, 0);
|
||||
ia64_stfd_inc_imm_hint (code, 1, 2, 255, 0);
|
||||
ia64_stf8_inc_imm_hint (code, 1, 2, 255, 0);
|
||||
ia64_stfe_inc_imm_hint (code, 1, 2, 255, 0);
|
||||
|
||||
ia64_stf_spill_inc_imm_hint (code, 1, 2, 255, 0);
|
||||
|
||||
ia64_ldfps_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldfpd_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldfp8_hint (code, 1, 2, 3, 0);
|
||||
|
||||
ia64_ldfps_s_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldfpd_s_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldfp8_s_hint (code, 1, 2, 3, 0);
|
||||
|
||||
ia64_ldfps_a_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldfpd_a_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldfp8_a_hint (code, 1, 2, 3, 0);
|
||||
|
||||
ia64_ldfps_sa_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldfpd_sa_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldfp8_sa_hint (code, 1, 2, 3, 0);
|
||||
|
||||
ia64_ldfps_c_clr_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldfpd_c_clr_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldfp8_c_clr_hint (code, 1, 2, 3, 0);
|
||||
|
||||
ia64_ldfps_c_nc_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldfpd_c_nc_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldfp8_c_nc_hint (code, 1, 2, 3, 0);
|
||||
|
||||
ia64_ldfps_inc_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldfpd_inc_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldfp8_inc_hint (code, 1, 2, 3, 0);
|
||||
|
||||
ia64_ldfps_s_inc_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldfpd_s_inc_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldfp8_s_inc_hint (code, 1, 2, 3, 0);
|
||||
|
||||
ia64_ldfps_a_inc_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldfpd_a_inc_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldfp8_a_inc_hint (code, 1, 2, 3, 0);
|
||||
|
||||
ia64_ldfps_sa_inc_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldfpd_sa_inc_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldfp8_sa_inc_hint (code, 1, 2, 3, 0);
|
||||
|
||||
ia64_ldfps_c_clr_inc_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldfpd_c_clr_inc_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldfp8_c_clr_inc_hint (code, 1, 2, 3, 0);
|
||||
|
||||
ia64_ldfps_c_nc_inc_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldfpd_c_nc_inc_hint (code, 1, 2, 3, 0);
|
||||
ia64_ldfp8_c_nc_inc_hint (code, 1, 2, 3, 0);
|
||||
|
||||
ia64_lfetch_hint (code, 1, 0);
|
||||
ia64_lfetch_excl_hint (code, 1, 0);
|
||||
ia64_lfetch_fault_hint (code, 1, 0);
|
||||
ia64_lfetch_fault_excl_hint (code, 1, 0);
|
||||
|
||||
ia64_lfetch_hint (code, 1, IA64_LFHINT_NT1);
|
||||
ia64_lfetch_hint (code, 1, IA64_LFHINT_NT2);
|
||||
ia64_lfetch_hint (code, 1, IA64_LFHINT_NTA);
|
||||
|
||||
ia64_lfetch_inc_hint (code, 1, 2, 0);
|
||||
ia64_lfetch_excl_inc_hint (code, 1, 2, 0);
|
||||
ia64_lfetch_fault_inc_hint (code, 1, 2, 0);
|
||||
ia64_lfetch_fault_excl_inc_hint (code, 1, 2, 0);
|
||||
|
||||
ia64_lfetch_inc_imm_hint (code, 1, 255, 0);
|
||||
ia64_lfetch_excl_inc_imm_hint (code, 1, 255, 0);
|
||||
ia64_lfetch_fault_inc_imm_hint (code, 1, 255, 0);
|
||||
ia64_lfetch_fault_excl_inc_imm_hint (code, 1, 255, 0);
|
||||
|
||||
ia64_cmpxchg1_acq_hint (code, 1, 2, 3, 0);
|
||||
ia64_cmpxchg2_acq_hint (code, 1, 2, 3, 0);
|
||||
ia64_cmpxchg4_acq_hint (code, 1, 2, 3, 0);
|
||||
ia64_cmpxchg8_acq_hint (code, 1, 2, 3, 0);
|
||||
ia64_cmpxchg1_rel_hint (code, 1, 2, 3, 0);
|
||||
ia64_cmpxchg2_rel_hint (code, 1, 2, 3, 0);
|
||||
ia64_cmpxchg4_rel_hint (code, 1, 2, 3, 0);
|
||||
ia64_cmpxchg8_rel_hint (code, 1, 2, 3, 0);
|
||||
ia64_cmpxchg16_acq_hint (code, 1, 2, 3, 0);
|
||||
ia64_cmpxchg16_rel_hint (code, 1, 2, 3, 0);
|
||||
ia64_xchg1_hint (code, 1, 2, 3, 0);
|
||||
ia64_xchg2_hint (code, 1, 2, 3, 0);
|
||||
ia64_xchg4_hint (code, 1, 2, 3, 0);
|
||||
ia64_xchg8_hint (code, 1, 2, 3, 0);
|
||||
|
||||
ia64_fetchadd4_acq_hint (code, 1, 2, -16, 0);
|
||||
ia64_fetchadd4_acq_hint (code, 1, 2, -8, 0);
|
||||
ia64_fetchadd4_acq_hint (code, 1, 2, -4, 0);
|
||||
ia64_fetchadd4_acq_hint (code, 1, 2, -1, 0);
|
||||
ia64_fetchadd4_acq_hint (code, 1, 2, 1, 0);
|
||||
ia64_fetchadd4_acq_hint (code, 1, 2, 4, 0);
|
||||
ia64_fetchadd4_acq_hint (code, 1, 2, 8, 0);
|
||||
ia64_fetchadd4_acq_hint (code, 1, 2, 16, 0);
|
||||
|
||||
ia64_fetchadd4_acq_hint (code, 1, 2, 16, 0);
|
||||
ia64_fetchadd8_acq_hint (code, 1, 2, 16, 0);
|
||||
ia64_fetchadd4_rel_hint (code, 1, 2, 16, 0);
|
||||
ia64_fetchadd8_rel_hint (code, 1, 2, 16, 0);
|
||||
|
||||
ia64_setf_sig (code, 1, 2);
|
||||
ia64_setf_exp (code, 1, 2);
|
||||
ia64_setf_s (code, 1, 2);
|
||||
ia64_setf_d (code, 1, 2);
|
||||
|
||||
ia64_getf_sig (code, 1, 2);
|
||||
ia64_getf_exp (code, 1, 2);
|
||||
ia64_getf_s (code, 1, 2);
|
||||
ia64_getf_d (code, 1, 2);
|
||||
|
||||
ia64_chk_s_m (code, 1, 0);
|
||||
ia64_chk_s_m (code, 1, 1);
|
||||
ia64_chk_s_m (code, 1, -1);
|
||||
|
||||
ia64_chk_s_float_m (code, 1, 0);
|
||||
|
||||
ia64_chk_a_nc (code, 1, 0);
|
||||
ia64_chk_a_nc (code, 1, 1);
|
||||
ia64_chk_a_nc (code, 1, -1);
|
||||
|
||||
ia64_chk_a_nc (code, 1, 0);
|
||||
ia64_chk_a_clr (code, 1, 0);
|
||||
|
||||
ia64_chk_a_nc_float (code, 1, 0);
|
||||
ia64_chk_a_clr_float (code, 1, 0);
|
||||
|
||||
ia64_invala (code);
|
||||
ia64_fwb (code);
|
||||
ia64_mf (code);
|
||||
ia64_mf_a (code);
|
||||
ia64_srlz_d (code);
|
||||
ia64_stlz_i (code);
|
||||
ia64_sync_i (code);
|
||||
|
||||
ia64_flushrs (code);
|
||||
ia64_loadrs (code);
|
||||
|
||||
ia64_invala_e (code, 1);
|
||||
ia64_invala_e_float (code, 1);
|
||||
|
||||
ia64_fc (code, 1);
|
||||
ia64_fc_i (code, 1);
|
||||
|
||||
ia64_mov_to_ar_m (code, 1, 1);
|
||||
|
||||
ia64_mov_to_ar_imm_m (code, 1, 127);
|
||||
|
||||
ia64_mov_from_ar_m (code, 1, 1);
|
||||
|
||||
ia64_mov_to_cr (code, 1, 2);
|
||||
|
||||
ia64_mov_from_cr (code, 1, 2);
|
||||
|
||||
ia64_alloc (code, 1, 3, 4, 5, 0);
|
||||
ia64_alloc (code, 1, 3, 4, 5, 8);
|
||||
|
||||
ia64_mov_to_psr_l (code, 1);
|
||||
ia64_mov_to_psr_um (code, 1);
|
||||
|
||||
ia64_mov_from_psr (code, 1);
|
||||
ia64_mov_from_psr_um (code, 1);
|
||||
|
||||
ia64_break_m (code, 0x1234);
|
||||
ia64_nop_m (code, 0x1234);
|
||||
ia64_hint_m (code, 0x1234);
|
||||
|
||||
ia64_br_cond_hint (code, 0, 0, 0, 0);
|
||||
ia64_br_wexit_hint (code, 0, 0, 0, 0);
|
||||
ia64_br_wtop_hint (code, 0, 0, 0, 0);
|
||||
|
||||
ia64_br_cloop_hint (code, 0, 0, 0, 0);
|
||||
ia64_br_cexit_hint (code, 0, 0, 0, 0);
|
||||
ia64_br_ctop_hint (code, 0, 0, 0, 0);
|
||||
|
||||
ia64_br_call_hint (code, 1, 0, 0, 0, 0);
|
||||
|
||||
ia64_br_cond_reg_hint (code, 1, 0, 0, 0);
|
||||
ia64_br_ia_reg_hint (code, 1, 0, 0, 0);
|
||||
ia64_br_ret_reg_hint (code, 1, 0, 0, 0);
|
||||
|
||||
ia64_br_call_reg_hint (code, 1, 2, 0, 0, 0);
|
||||
|
||||
ia64_cover (code);
|
||||
ia64_clrrrb (code);
|
||||
ia64_clrrrb_pr (code);
|
||||
ia64_rfi (code);
|
||||
ia64_bsw_0 (code);
|
||||
ia64_bsw_1 (code);
|
||||
ia64_epc (code);
|
||||
|
||||
ia64_break_b (code, 0x1234);
|
||||
ia64_nop_b (code, 0x1234);
|
||||
ia64_hint_b (code, 0x1234);
|
||||
|
||||
ia64_break_x (code, 0x2123456789ABCDEFULL);
|
||||
|
||||
ia64_movl (code, 1, 0x123456789ABCDEF0LL);
|
||||
|
||||
ia64_brl_cond_hint (code, 0, 0, 0, 0);
|
||||
ia64_brl_cond_hint (code, -1, 0, 0, 0);
|
||||
|
||||
ia64_brl_call_hint (code, 1, 0, 0, 0, 0);
|
||||
ia64_brl_call_hint (code, 1, -1, 0, 0, 0);
|
||||
|
||||
ia64_nop_x (code, 0x2123456789ABCDEFULL);
|
||||
ia64_hint_x (code, 0x2123456789ABCDEFULL);
|
||||
|
||||
ia64_movl_pred (code, 1, 1, 0x123456789ABCDEF0LL);
|
||||
|
||||
/* FLOATING-POINT */
|
||||
ia64_fma_sf_pred (code, 1, 1, 2, 3, 4, 2);
|
||||
ia64_fma_s_sf_pred (code, 1, 1, 2, 3, 4, 2);
|
||||
ia64_fma_d_sf_pred (code, 1, 1, 2, 3, 4, 2);
|
||||
ia64_fpma_sf_pred (code, 1, 1, 2, 3, 4, 2);
|
||||
ia64_fms_sf_pred (code, 1, 1, 2, 3, 4, 2);
|
||||
ia64_fms_s_sf_pred (code, 1, 1, 2, 3, 4, 2);
|
||||
ia64_fms_d_sf_pred (code, 1, 1, 2, 3, 4, 2);
|
||||
ia64_fpms_sf_pred (code, 1, 1, 2, 3, 4, 2);
|
||||
ia64_fnma_sf_pred (code, 1, 1, 2, 3, 4, 2);
|
||||
ia64_fnma_s_sf_pred (code, 1, 1, 2, 3, 4, 2);
|
||||
ia64_fnma_d_sf_pred (code, 1, 1, 2, 3, 4, 2);
|
||||
ia64_fpnma_sf_pred (code, 1, 1, 2, 3, 4, 2);
|
||||
|
||||
ia64_xma_l_pred (code, 1, 1, 2, 3, 4);
|
||||
ia64_xma_h_pred (code, 1, 1, 2, 3, 4);
|
||||
ia64_xma_hu_pred (code, 1, 1, 2, 3, 4);
|
||||
|
||||
ia64_fselect_pred (code, 1, 1, 2, 3, 4);
|
||||
|
||||
ia64_fcmp_eq_sf_pred (code, 1, 1, 2, 3, 4, 0);
|
||||
ia64_fcmp_lt_sf_pred (code, 1, 1, 2, 3, 4, 0);
|
||||
ia64_fcmp_le_sf_pred (code, 1, 1, 2, 3, 4, 0);
|
||||
ia64_fcmp_unord_sf_pred (code, 1, 1, 2, 3, 4, 0);
|
||||
ia64_fcmp_eq_unc_sf_pred (code, 1, 1, 2, 3, 4, 0);
|
||||
ia64_fcmp_lt_unc_sf_pred (code, 1, 1, 2, 3, 4, 0);
|
||||
ia64_fcmp_le_unc_sf_pred (code, 1, 1, 2, 3, 4, 0);
|
||||
ia64_fcmp_unord_unc_sf_pred (code, 1, 1, 2, 3, 4, 0);
|
||||
|
||||
ia64_fclass_m_pred (code, 1, 1, 2, 3, 0x1ff);
|
||||
ia64_fclass_m_unc_pred (code, 1, 1, 2, 3, 0x1ff);
|
||||
|
||||
ia64_frcpa_sf_pred (code, 1, 1, 2, 3, 4, 0);
|
||||
ia64_fprcpa_sf_pred (code, 1, 1, 2, 3, 4, 0);
|
||||
|
||||
ia64_frsqrta_sf_pred (code, 1, 1, 2, 4, 0);
|
||||
ia64_fprsqrta_sf_pred (code, 1, 1, 2, 4, 0);
|
||||
|
||||
ia64_fmin_sf_pred (code, 1, 2, 3, 4, 0);
|
||||
ia64_fman_sf_pred (code, 1, 2, 3, 4, 0);
|
||||
ia64_famin_sf_pred (code, 1, 2, 3, 4, 0);
|
||||
ia64_famax_sf_pred (code, 1, 2, 3, 4, 0);
|
||||
ia64_fpmin_sf_pred (code, 1, 2, 3, 4, 0);
|
||||
ia64_fpman_sf_pred (code, 1, 2, 3, 4, 0);
|
||||
ia64_fpamin_sf_pred (code, 1, 2, 3, 4, 0);
|
||||
ia64_fpamax_sf_pred (code, 1, 2, 3, 4, 0);
|
||||
ia64_fpcmp_eq_sf_pred (code, 1, 2, 3, 4, 0);
|
||||
ia64_fpcmp_lt_sf_pred (code, 1, 2, 3, 4, 0);
|
||||
ia64_fpcmp_le_sf_pred (code, 1, 2, 3, 4, 0);
|
||||
ia64_fpcmp_unord_sf_pred (code, 1, 2, 3, 4, 0);
|
||||
ia64_fpcmp_neq_sf_pred (code, 1, 2, 3, 4, 0);
|
||||
ia64_fpcmp_nlt_sf_pred (code, 1, 2, 3, 4, 0);
|
||||
ia64_fpcmp_nle_sf_pred (code, 1, 2, 3, 4, 0);
|
||||
ia64_fpcmp_ord_sf_pred (code, 1, 2, 3, 4, 0);
|
||||
|
||||
ia64_fmerge_s_pred (code, 1, 2, 3, 4);
|
||||
ia64_fmerge_ns_pred (code, 1, 2, 3, 4);
|
||||
ia64_fmerge_se_pred (code, 1, 2, 3, 4);
|
||||
ia64_fmix_lr_pred (code, 1, 2, 3, 4);
|
||||
ia64_fmix_r_pred (code, 1, 2, 3, 4);
|
||||
ia64_fmix_l_pred (code, 1, 2, 3, 4);
|
||||
ia64_fsxt_r_pred (code, 1, 2, 3, 4);
|
||||
ia64_fsxt_l_pred (code, 1, 2, 3, 4);
|
||||
ia64_fpack_pred (code, 1, 2, 3, 4);
|
||||
ia64_fswap_pred (code, 1, 2, 3, 4);
|
||||
ia64_fswap_nl_pred (code, 1, 2, 3, 4);
|
||||
ia64_fswap_nr_pred (code, 1, 2, 3, 4);
|
||||
ia64_fand_pred (code, 1, 2, 3, 4);
|
||||
ia64_fandcm_pred (code, 1, 2, 3, 4);
|
||||
ia64_for_pred (code, 1, 2, 3, 4);
|
||||
ia64_fxor_pred (code, 1, 2, 3, 4);
|
||||
ia64_fpmerge_s_pred (code, 1, 2, 3, 4);
|
||||
ia64_fpmerge_ns_pred (code, 1, 2, 3, 4);
|
||||
ia64_fpmerge_se_pred (code, 1, 2, 3, 4);
|
||||
|
||||
ia64_fcvt_fx_sf_pred ((code), 1, 2, 3, 0);
|
||||
ia64_fcvt_fxu_sf_pred ((code), 1, 2, 3, 0);
|
||||
ia64_fcvt_fx_trunc_sf_pred ((code), 1, 2, 3, 0);
|
||||
ia64_fcvt_fxu_trunc_sf_pred ((code), 1, 2, 3, 0);
|
||||
ia64_fpcvt_fx_sf_pred ((code), 1, 2, 3, 0);
|
||||
ia64_fpcvt_fxu_sf_pred ((code), 1, 2, 3, 0);
|
||||
ia64_fpcvt_fx_trunc_sf_pred ((code), 1, 2, 3, 0);
|
||||
ia64_fpcvt_fxu_trunc_sf_pred ((code), 1, 2, 3, 0);
|
||||
|
||||
ia64_fcvt_xf_pred ((code), 1, 2, 3);
|
||||
|
||||
ia64_fsetc_sf_pred ((code), 1, 0x33, 0x33, 3);
|
||||
|
||||
ia64_fclrf_sf_pred ((code), 1, 3);
|
||||
|
||||
ia64_fchkf_sf_pred ((code), 1, -1, 3);
|
||||
|
||||
ia64_break_f_pred ((code), 1, 0x1234);
|
||||
|
||||
ia64_movl (code, 31, -123456);
|
||||
|
||||
ia64_codegen_close (code);
|
||||
|
||||
#if 0
|
||||
/* disassembly */
|
||||
{
|
||||
guint8 *buf = code.buf;
|
||||
int template;
|
||||
guint64 dw1, dw2;
|
||||
guint64 ins1, ins2, ins3;
|
||||
|
||||
ia64_break_i (code, 0x1234);
|
||||
|
||||
ia64_codegen_close (code);
|
||||
|
||||
dw1 = ((guint64*)buf) [0];
|
||||
dw2 = ((guint64*)buf) [1];
|
||||
|
||||
template = ia64_bundle_template (buf);
|
||||
ins1 = ia64_bundle_ins1 (buf);
|
||||
ins2 = ia64_bundle_ins2 (buf);
|
||||
ins3 = ia64_bundle_ins3 (buf);
|
||||
|
||||
code.buf = buf;
|
||||
ia64_emit_bundle_template (&code, template, ins1, ins2, ins3);
|
||||
|
||||
g_assert (dw1 == ((guint64*)buf) [0]);
|
||||
g_assert (dw2 == ((guint64*)buf) [1]);
|
||||
}
|
||||
#endif
|
||||
|
||||
mono_disassemble_code (buf, 40960, "code");
|
||||
|
||||
return 0;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
6
FFTS/Sources/FFTS/src/arch/mips/.gitignore
vendored
6
FFTS/Sources/FFTS/src/arch/mips/.gitignore
vendored
@@ -1,6 +0,0 @@
|
||||
/
|
||||
/Makefile
|
||||
/Makefile.in
|
||||
/*.o
|
||||
/*.lo
|
||||
/.deps
|
||||
@@ -1,8 +0,0 @@
|
||||
|
||||
AM_CPPFLAGS = $(GLIB_CFLAGS) -I$(top_srcdir)
|
||||
|
||||
noinst_LTLIBRARIES = libmonoarch-mips.la
|
||||
|
||||
libmonoarch_mips_la_SOURCES = mips-codegen.h
|
||||
|
||||
noinst_PROGRAMS = test
|
||||
@@ -1,435 +0,0 @@
|
||||
#ifndef __MIPS_CODEGEN_H__
|
||||
#define __MIPS_CODEGEN_H__
|
||||
/*
|
||||
* Copyright (c) 2004 Novell, Inc
|
||||
* Author: Paolo Molaro (lupus@ximian.com)
|
||||
*
|
||||
*/
|
||||
|
||||
/* registers */
|
||||
enum {
|
||||
mips_zero,
|
||||
mips_at, /* assembler temp */
|
||||
mips_v0, /* return values */
|
||||
mips_v1,
|
||||
mips_a0, /* 4 - func arguments */
|
||||
mips_a1,
|
||||
mips_a2,
|
||||
mips_a3,
|
||||
#if _MIPS_SIM == _ABIO32
|
||||
mips_t0, /* 8 temporaries */
|
||||
mips_t1,
|
||||
mips_t2,
|
||||
mips_t3,
|
||||
mips_t4,
|
||||
mips_t5,
|
||||
mips_t6,
|
||||
mips_t7,
|
||||
#elif _MIPS_SIM == _ABIN32
|
||||
mips_a4, /* 4 more argument registers */
|
||||
mips_a5,
|
||||
mips_a6,
|
||||
mips_a7,
|
||||
mips_t0, /* 4 temporaries */
|
||||
mips_t1,
|
||||
mips_t2,
|
||||
mips_t3,
|
||||
#endif
|
||||
mips_s0, /* 16 calle saved */
|
||||
mips_s1,
|
||||
mips_s2,
|
||||
mips_s3,
|
||||
mips_s4,
|
||||
mips_s5,
|
||||
mips_s6,
|
||||
mips_s7,
|
||||
mips_t8, /* 24 temps */
|
||||
mips_t9, /* 25 temp / pic call-through register */
|
||||
mips_k0, /* 26 kernel-reserved */
|
||||
mips_k1,
|
||||
mips_gp, /* 28 */
|
||||
mips_sp, /* stack pointer */
|
||||
mips_fp, /* frame pointer */
|
||||
mips_ra /* return address */
|
||||
};
|
||||
|
||||
/* we treat the register file as containing just doubles... */
|
||||
enum {
|
||||
mips_f0, /* return regs */
|
||||
mips_f1,
|
||||
mips_f2,
|
||||
mips_f3,
|
||||
mips_f4, /* temps */
|
||||
mips_f5,
|
||||
mips_f6,
|
||||
mips_f7,
|
||||
mips_f8,
|
||||
mips_f9,
|
||||
mips_f10,
|
||||
mips_f11,
|
||||
mips_f12, /* first arg */
|
||||
mips_f13,
|
||||
mips_f14, /* second arg */
|
||||
mips_f15,
|
||||
mips_f16, /* temps */
|
||||
mips_f17,
|
||||
mips_f18,
|
||||
mips_f19,
|
||||
mips_f20, /* callee saved */
|
||||
mips_f21,
|
||||
mips_f22,
|
||||
mips_f23,
|
||||
mips_f24,
|
||||
mips_f25,
|
||||
mips_f26,
|
||||
mips_f27,
|
||||
mips_f28,
|
||||
mips_f29,
|
||||
mips_f30,
|
||||
mips_f31
|
||||
};
|
||||
|
||||
/* prefetch hints */
|
||||
enum {
|
||||
MIPS_FOR_LOAD,
|
||||
MIPS_FOR_STORE,
|
||||
MIPS_FOR_LOAD_STREAMED = 4,
|
||||
MIPS_FOR_STORE_STREAMED,
|
||||
MIPS_FOR_LOAD_RETAINED,
|
||||
MIPS_FOR_STORE_RETAINED
|
||||
};
|
||||
|
||||
/* coprocessors */
|
||||
enum {
|
||||
MIPS_COP0,
|
||||
MIPS_COP1,
|
||||
MIPS_COP2,
|
||||
MIPS_COP3
|
||||
};
|
||||
|
||||
enum {
|
||||
MIPS_FMT_SINGLE = 16,
|
||||
MIPS_FMT_DOUBLE = 17,
|
||||
MIPS_FMT_WORD = 20,
|
||||
MIPS_FMT_LONG = 21,
|
||||
MIPS_FMT3_SINGLE = 0,
|
||||
MIPS_FMT3_DOUBLE = 1
|
||||
};
|
||||
|
||||
/* fpu rounding mode */
|
||||
enum {
|
||||
MIPS_ROUND_TO_NEAREST,
|
||||
MIPS_ROUND_TO_ZERO,
|
||||
MIPS_ROUND_TO_POSINF,
|
||||
MIPS_ROUND_TO_NEGINF,
|
||||
MIPS_ROUND_MASK = 3
|
||||
};
|
||||
|
||||
/* fpu enable/cause flags, cc */
|
||||
enum {
|
||||
MIPS_FPU_C_MASK = 1 << 23,
|
||||
MIPS_INEXACT = 1,
|
||||
MIPS_UNDERFLOW = 2,
|
||||
MIPS_OVERFLOW = 4,
|
||||
MIPS_DIVZERO = 8,
|
||||
MIPS_INVALID = 16,
|
||||
MIPS_NOTIMPL = 32,
|
||||
MIPS_FPU_FLAGS_OFFSET = 2,
|
||||
MIPS_FPU_ENABLES_OFFSET = 7,
|
||||
MIPS_FPU_CAUSES_OFFSET = 12
|
||||
};
|
||||
|
||||
/* fpu condition values - see manual entry for C.cond.fmt instructions */
|
||||
enum {
|
||||
MIPS_FPU_F,
|
||||
MIPS_FPU_UN,
|
||||
MIPS_FPU_EQ,
|
||||
MIPS_FPU_UEQ,
|
||||
MIPS_FPU_OLT,
|
||||
MIPS_FPU_ULT,
|
||||
MIPS_FPU_OLE,
|
||||
MIPS_FPU_ULE,
|
||||
MIPS_FPU_SF,
|
||||
MIPS_FPU_NGLE,
|
||||
MIPS_FPU_SEQ,
|
||||
MIPS_FPU_NGL,
|
||||
MIPS_FPU_LT,
|
||||
MIPS_FPU_NGE,
|
||||
MIPS_FPU_LE,
|
||||
MIPS_FPU_NGT
|
||||
};
|
||||
|
||||
#if SIZEOF_REGISTER == 4
|
||||
|
||||
#define MIPS_SW mips_sw
|
||||
#define MIPS_LW mips_lw
|
||||
#define MIPS_ADDU mips_addu
|
||||
#define MIPS_ADDIU mips_addiu
|
||||
#define MIPS_SWC1 mips_swc1
|
||||
#define MIPS_LWC1 mips_lwc1
|
||||
#define MIPS_MOVE mips_move
|
||||
|
||||
#elif SIZEOF_REGISTER == 8
|
||||
|
||||
#define MIPS_SW mips_sd
|
||||
#define MIPS_LW mips_ld
|
||||
#define MIPS_ADDU mips_daddu
|
||||
#define MIPS_ADDIU mips_daddiu
|
||||
#define MIPS_SWC1 mips_sdc1
|
||||
#define MIPS_LWC1 mips_ldc1
|
||||
#define MIPS_MOVE mips_dmove
|
||||
|
||||
#else
|
||||
#error Unknown SIZEOF_REGISTER
|
||||
#endif
|
||||
|
||||
#define mips_emit32(c,x) do { \
|
||||
*((guint32 *) (void *)(c)) = x; \
|
||||
(c) = (typeof(c))(((guint32 *)(void *)(c)) + 1); \
|
||||
} while (0)
|
||||
|
||||
#define mips_format_i(code,op,rs,rt,imm) mips_emit32 ((code), (((op)<<26)|((rs)<<21)|((rt)<<16)|((imm)&0xffff)))
|
||||
#define mips_format_j(code,op,imm) mips_emit32 ((code), (((op)<<26)|((imm)&0x03ffffff)))
|
||||
#define mips_format_r(code,op,rs,rt,rd,sa,func) mips_emit32 ((code), (((op)<<26)|((rs)<<21)|((rt)<<16)|((rd)<<11)|((sa)<<6)|(func)))
|
||||
#define mips_format_divmul(code,op,src1,src2,fun) mips_emit32 ((code), (((op)<<26)|((src1)<<21)|((src2)<<16)|(fun)))
|
||||
|
||||
#define mips_is_imm16(val) ((gint)(gshort)(gint)(val) == (gint)(val))
|
||||
|
||||
/* Load always using lui/addiu pair (for later patching) */
|
||||
#define mips_load(c,D,v) do { \
|
||||
if (((guint32)(v)) & (1 << 15)) { \
|
||||
mips_lui ((c), (D), mips_zero, (((guint32)(v))>>16)+1); \
|
||||
} \
|
||||
else { \
|
||||
mips_lui ((c), (D), mips_zero, (((guint32)(v))>>16)); \
|
||||
} \
|
||||
mips_addiu ((c), (D), (D), ((guint32)(v)) & 0xffff); \
|
||||
} while (0)
|
||||
|
||||
/* load constant - no patch-up */
|
||||
#define mips_load_const(c,D,v) do { \
|
||||
if (!mips_is_imm16 ((v))) { \
|
||||
if (((guint32)(v)) & (1 << 15)) { \
|
||||
mips_lui ((c), (D), mips_zero, (((guint32)(v))>>16)+1); \
|
||||
} \
|
||||
else { \
|
||||
mips_lui ((c), (D), mips_zero, (((guint32)(v))>>16)); \
|
||||
} \
|
||||
if (((guint32)(v)) & 0xffff) \
|
||||
mips_addiu ((c), (D), (D), ((guint32)(v)) & 0xffff); \
|
||||
} \
|
||||
else \
|
||||
mips_addiu ((c), (D), mips_zero, ((guint32)(v)) & 0xffff); \
|
||||
} while (0)
|
||||
|
||||
/* arithmetric ops */
|
||||
#define mips_add(c,dest,src1,src2) mips_format_r(c,0,src1,src2,dest,0,32)
|
||||
#define mips_addi(c,dest,src1,imm) mips_format_i(c,8,src1,dest,imm)
|
||||
#define mips_addu(c,dest,src1,src2) mips_format_r(c,0,src1,src2,dest,0,33)
|
||||
#define mips_addiu(c,dest,src1,imm) mips_format_i(c,9,src1,dest,imm)
|
||||
#define mips_dadd(c,dest,src1,src2) mips_format_r(c,0,src1,src2,dest,0,44)
|
||||
#define mips_daddi(c,dest,src1,imm) mips_format_i(c,24,src1,dest,imm)
|
||||
#define mips_daddu(c,dest,src1,src2) mips_format_r(c,0,src1,src2,dest,0,45)
|
||||
#define mips_daddiu(c,dest,src1,imm) mips_format_i(c,25,src1,dest,imm)
|
||||
#define mips_dsub(c,dest,src1,src2) mips_format_r(c,0,src1,src2,dest,0,46)
|
||||
#define mips_dsubu(c,dest,src1,src2) mips_format_r(c,0,src1,src2,dest,0,47)
|
||||
#define mips_mul(c,dest,src1,src2) mips_format_r(c,28,src1,src2,dest,0,2)
|
||||
#define mips_sub(c,dest,src1,src2) mips_format_r(c,0,src1,src2,dest,0,34)
|
||||
#define mips_subu(c,dest,src1,src2) mips_format_r(c,0,src1,src2,dest,0,35)
|
||||
|
||||
/* div and mul ops */
|
||||
#define mips_ddiv(c,src1,src2) mips_format_divmul(c,0,src1,src2,30)
|
||||
#define mips_ddivu(c,src1,src2) mips_format_divmul(c,0,src1,src2,31)
|
||||
#define mips_div(c,src1,src2) mips_format_divmul(c,0,src1,src2,26)
|
||||
#define mips_divu(c,src1,src2) mips_format_divmul(c,0,src1,src2,27)
|
||||
#define mips_dmult(c,src1,src2) mips_format_divmul(c,0,src1,src2,28)
|
||||
#define mips_dmultu(c,src1,src2) mips_format_divmul(c,0,src1,src2,29)
|
||||
#define mips_mult(c,src1,src2) mips_format_divmul(c,0,src1,src2,24)
|
||||
#define mips_multu(c,src1,src2) mips_format_divmul(c,0,src1,src2,25)
|
||||
|
||||
/* shift ops */
|
||||
#define mips_dsll(c,dest,src1,imm) mips_format_r(c,0,0,src1,dest,imm,56)
|
||||
#define mips_dsll32(c,dest,src1,imm) mips_format_r(c,0,0,src1,dest,imm,60)
|
||||
#define mips_dsllv(c,dest,src1,src2) mips_format_r(c,0,src2,src1,dest,0,20)
|
||||
#define mips_dsra(c,dest,src1,imm) mips_format_r(c,0,0,src1,dest,imm,59)
|
||||
#define mips_dsra32(c,dest,src1,imm) mips_format_r(c,0,0,src1,dest,imm,63)
|
||||
#define mips_dsrav(c,dest,src1,src2) mips_format_r(c,0,src2,src1,dest,0,23)
|
||||
#define mips_dsrl(c,dest,src1,imm) mips_format_r(c,0,0,src1,dest,imm,58)
|
||||
#define mips_dsrl32(c,dest,src1,imm) mips_format_r(c,0,0,src1,dest,imm,62)
|
||||
#define mips_dsrlv(c,dest,src1,src2) mips_format_r(c,0,src2,src1,dest,0,22)
|
||||
#define mips_sll(c,dest,src1,imm) mips_format_r(c,0,0,src1,dest,imm,0)
|
||||
#define mips_sllv(c,dest,src1,src2) mips_format_r(c,0,src2,src1,dest,0,4)
|
||||
#define mips_sra(c,dest,src1,imm) mips_format_r(c,0,0,src1,dest,imm,3)
|
||||
#define mips_srav(c,dest,src1,src2) mips_format_r(c,0,src2,src1,dest,0,7)
|
||||
#define mips_srl(c,dest,src1,imm) mips_format_r(c,0,0,src1,dest,imm,2)
|
||||
#define mips_srlv(c,dest,src1,src2) mips_format_r(c,0,src2,src1,dest,0,6)
|
||||
|
||||
/* logical ops */
|
||||
#define mips_and(c,dest,src1,src2) mips_format_r(c,0,src1,src2,dest,0,36)
|
||||
#define mips_andi(c,dest,src1,imm) mips_format_i(c,12,src1,dest,imm)
|
||||
#define mips_nor(c,dest,src1,src2) mips_format_r(c,0,src1,src2,dest,0,39)
|
||||
#define mips_or(c,dest,src1,src2) mips_format_r(c,0,src1,src2,dest,0,37)
|
||||
#define mips_ori(c,dest,src1,uimm) mips_format_i(c,13,src1,dest,uimm)
|
||||
#define mips_xor(c,dest,src1,src2) mips_format_r(c,0,src1,src2,dest,0,38)
|
||||
#define mips_xori(c,dest,src1,uimm) mips_format_i(c,14,src1,dest,uimm)
|
||||
|
||||
/* compares */
|
||||
#define mips_slt(c,dest,src1,src2) mips_format_r(c,0,src1,src2,dest,0,42)
|
||||
#define mips_slti(c,dest,src1,imm) mips_format_i(c,10,src1,dest,imm)
|
||||
#define mips_sltiu(c,dest,src1,imm) mips_format_i(c,11,src1,dest,imm)
|
||||
#define mips_sltu(c,dest,src1,src2) mips_format_r(c,0,src1,src2,dest,0,43)
|
||||
/* missing traps: teq, teqi, tge, tgei, tgeiu, tgeu, tlt, tlti, tltiu, tltu, tne, tnei, */
|
||||
|
||||
/* conditional branches */
|
||||
#define mips_beq(c,src1,src2,offset) mips_format_i(c,4,src1,src2,offset)
|
||||
#define mips_beql(c,src1,src2,offset) mips_format_i(c,20,src1,src2,offset)
|
||||
#define mips_bgez(c,src1,offset) mips_format_i(c,1,src1,1,offset)
|
||||
#define mips_bgezal(c,src1,offset) mips_format_i(c,1,src1,17,offset)
|
||||
#define mips_bgezall(c,src1,offset) mips_format_i(c,1,src1,19,offset)
|
||||
#define mips_bgezl(c,src1,offset) mips_format_i(c,1,src1,3,offset)
|
||||
#define mips_bgtz(c,src1,offset) mips_format_i(c,7,src1,0,offset)
|
||||
#define mips_bgtzl(c,src1,offset) mips_format_i(c,23,src1,0,offset)
|
||||
#define mips_blez(c,src1,offset) mips_format_i(c,6,src1,0,offset)
|
||||
#define mips_blezl(c,src1,offset) mips_format_i(c,22,src1,0,offset)
|
||||
#define mips_bltz(c,src1,offset) mips_format_i(c,1,src1,0,offset)
|
||||
#define mips_bltzal(c,src1,offset) mips_format_i(c,1,src1,16,offset)
|
||||
#define mips_bltzall(c,src1,offset) mips_format_i(c,1,src1,18,offset)
|
||||
#define mips_bltzl(c,src1,offset) mips_format_i(c,1,src1,2,offset)
|
||||
#define mips_bne(c,src1,src2,offset) mips_format_i(c,5,src1,src2,offset)
|
||||
#define mips_bnel(c,src1,src2,offset) mips_format_i(c,21,src1,src2,offset)
|
||||
|
||||
/* uncond branches and calls */
|
||||
#define mips_jump(c,target) mips_format_j(c,2,target)
|
||||
#define mips_jumpl(c,target) mips_format_j(c,3,target)
|
||||
#define mips_jalr(c,src1,retreg) mips_format_r(c,0,src1,0,retreg,0,9)
|
||||
#define mips_jr(c,src1) mips_emit32(c,((src1)<<21)|8)
|
||||
|
||||
/* loads and stores */
|
||||
#define mips_lb(c,dest,base,offset) mips_format_i(c,32,base,dest,offset)
|
||||
#define mips_lbu(c,dest,base,offset) mips_format_i(c,36,base,dest,offset)
|
||||
#define mips_ld(c,dest,base,offset) mips_format_i(c,55,base,dest,offset)
|
||||
#define mips_ldl(c,dest,base,offset) mips_format_i(c,26,base,dest,offset)
|
||||
#define mips_ldr(c,dest,base,offset) mips_format_i(c,27,base,dest,offset)
|
||||
#define mips_lh(c,dest,base,offset) mips_format_i(c,33,base,dest,offset)
|
||||
#define mips_lhu(c,dest,base,offset) mips_format_i(c,37,base,dest,offset)
|
||||
#define mips_ll(c,dest,base,offset) mips_format_i(c,48,base,dest,offset)
|
||||
#define mips_lld(c,dest,base,offset) mips_format_i(c,52,base,dest,offset)
|
||||
#define mips_lui(c,dest,base,uimm) mips_format_i(c,15,base,dest,uimm)
|
||||
#define mips_lw(c,dest,base,offset) mips_format_i(c,35,base,dest,offset)
|
||||
#define mips_lwl(c,dest,base,offset) mips_format_i(c,34,base,dest,offset)
|
||||
#define mips_lwr(c,dest,base,offset) mips_format_i(c,38,base,dest,offset)
|
||||
#define mips_lwu(c,dest,base,offset) mips_format_i(c,39,base,dest,offset)
|
||||
|
||||
#define mips_sb(c,src,base,offset) mips_format_i(c,40,base,src,offset)
|
||||
#define mips_sc(c,src,base,offset) mips_format_i(c,56,base,src,offset)
|
||||
#define mips_scd(c,src,base,offset) mips_format_i(c,60,base,src,offset)
|
||||
#define mips_sd(c,src,base,offset) mips_format_i(c,63,base,src,offset)
|
||||
#define mips_sdl(c,src,base,offset) mips_format_i(c,44,base,src,offset)
|
||||
#define mips_sdr(c,src,base,offset) mips_format_i(c,45,base,src,offset)
|
||||
#define mips_sh(c,src,base,offset) mips_format_i(c,41,base,src,offset)
|
||||
#define mips_sw(c,src,base,offset) mips_format_i(c,43,base,src,offset)
|
||||
#define mips_swl(c,src,base,offset) mips_format_i(c,50,base,src,offset)
|
||||
#define mips_swr(c,src,base,offset) mips_format_i(c,54,base,src,offset)
|
||||
|
||||
/* misc and coprocessor ops */
|
||||
#define mips_move(c,dest,src) mips_addu(c,dest,src,mips_zero)
|
||||
#define mips_dmove(c,dest,src) mips_daddu(c,dest,src,mips_zero)
|
||||
#define mips_nop(c) mips_or(c,mips_at,mips_at,0)
|
||||
#define mips_break(c,code) mips_emit32(c, ((code)<<6)|13)
|
||||
#define mips_mfhi(c,dest) mips_format_r(c,0,0,0,dest,0,16)
|
||||
#define mips_mflo(c,dest) mips_format_r(c,0,0,0,dest,0,18)
|
||||
#define mips_mthi(c,src) mips_format_r(c,0,src,0,0,0,17)
|
||||
#define mips_mtlo(c,src) mips_format_r(c,0,src,0,0,0,19)
|
||||
#define mips_movn(c,dest,src,test) mips_format_r(c,0,src,test,dest,0,11)
|
||||
#define mips_movz(c,dest,src,test) mips_format_r(c,0,src,test,dest,0,10)
|
||||
#define mips_pref(c,hint,base,offset) mips_format_i(c,51,base,hint,offset)
|
||||
#define mips_prefidx(c,hint,base,idx) mips_format_r(c,19,base,idx,hint,0,15)
|
||||
#define mips_sync(c,stype) mips_emit32(c, ((stype)<<6)|15)
|
||||
#define mips_syscall(c,code) mips_emit32(c, ((code)<<6)|12)
|
||||
|
||||
#define mips_cop(c,cop,fun) mips_emit32(c, ((16|(cop))<<26)|(fun))
|
||||
#define mips_ldc(c,cop,dest,base,offset) mips_format_i(c,(52|(cop)),base,dest,offset)
|
||||
#define mips_lwc(c,cop,dest,base,offset) mips_format_i(c,(48|(cop)),base,dest,offset)
|
||||
#define mips_sdc(c,cop,src,base,offset) mips_format_i(c,(60|(cop)),base,src,offset)
|
||||
#define mips_swc(c,cop,src,base,offset) mips_format_i(c,(56|(cop)),base,src,offset)
|
||||
#define mips_cfc1(c,dest,src) mips_format_r(c,17,2,dest,src,0,0)
|
||||
#define mips_ctc1(c,dest,src) mips_format_r(c,17,6,dest,src,0,0)
|
||||
|
||||
/* fpu ops */
|
||||
#define mips_fabss(c,dest,src) mips_format_r(c,17,MIPS_FMT_SINGLE,0,src,dest,5)
|
||||
#define mips_fabsd(c,dest,src) mips_format_r(c,17,MIPS_FMT_DOUBLE,0,src,dest,5)
|
||||
#define mips_fadds(c,dest,src1,src2) mips_format_r(c,17,MIPS_FMT_SINGLE,src2,src1,dest,0)
|
||||
#define mips_faddd(c,dest,src1,src2) mips_format_r(c,17,MIPS_FMT_DOUBLE,src2,src1,dest,0)
|
||||
#define mips_fdivs(c,dest,src1,src2) mips_format_r(c,17,MIPS_FMT_SINGLE,src2,src1,dest,3)
|
||||
#define mips_fdivd(c,dest,src1,src2) mips_format_r(c,17,MIPS_FMT_DOUBLE,src2,src1,dest,3)
|
||||
#define mips_fmuls(c,dest,src1,src2) mips_format_r(c,17,MIPS_FMT_SINGLE,src2,src1,dest,2)
|
||||
#define mips_fmuld(c,dest,src1,src2) mips_format_r(c,17,MIPS_FMT_DOUBLE,src2,src1,dest,2)
|
||||
#define mips_fnegs(c,dest,src) mips_format_r(c,17,MIPS_FMT_SINGLE,0,src,dest,7)
|
||||
#define mips_fnegd(c,dest,src) mips_format_r(c,17,MIPS_FMT_DOUBLE,0,src,dest,7)
|
||||
#define mips_fsqrts(c,dest,src) mips_format_r(c,17,MIPS_FMT_SINGLE,0,src,dest,4)
|
||||
#define mips_fsqrtd(c,dest,src) mips_format_r(c,17,MIPS_FMT_DOUBLE,0,src,dest,4)
|
||||
#define mips_fsubs(c,dest,src1,src2) mips_format_r(c,17,MIPS_FMT_SINGLE,src2,src1,dest,1)
|
||||
#define mips_fsubd(c,dest,src1,src2) mips_format_r(c,17,MIPS_FMT_DOUBLE,src2,src1,dest,1)
|
||||
#define mips_madds(c,dest,src1,src2,srcadd) mips_format_r(c,19,srcadd,src2,src1,dest,32|MIPS_FMT_SINGLE)
|
||||
#define mips_maddd(c,dest,src1,src2,srcadd) mips_format_r(c,19,srcadd,src2,src1,dest,32|MIPS_FMT_DOUBLE)
|
||||
#define mips_nmadds(c,dest,src1,src2,srcadd) mips_format_r(c,19,srcadd,src2,src1,dest,48|MIPS_FMT_SINGLE)
|
||||
#define mips_nmaddd(c,dest,src1,src2,srcadd) mips_format_r(c,19,srcadd,src2,src1,dest,48|MIPS_FMT_DOUBLE)
|
||||
#define mips_msubs(c,dest,src1,src2,srcsub) mips_format_r(c,19,srcsub,src2,src1,dest,40|MIPS_FMT_SINGLE)
|
||||
#define mips_msubd(c,dest,src1,src2,srcsub) mips_format_r(c,19,srcsub,src2,src1,dest,40|MIPS_FMT_DOUBLE)
|
||||
#define mips_nmsubs(c,dest,src1,src2,srcsub) mips_format_r(c,19,srcsub,src2,src1,dest,56|MIPS_FMT_SINGLE)
|
||||
#define mips_nmsubd(c,dest,src1,src2,srcsub) mips_format_r(c,19,srcsub,src2,src1,dest,56|MIPS_FMT_DOUBLE)
|
||||
|
||||
/* fp compare and branch */
|
||||
#define mips_fcmps(c,cond,src1,src2) mips_format_r(c,17,MIPS_FMT_SINGLE,src2,src1,0,(3<<4)|(cond))
|
||||
#define mips_fcmpd(c,cond,src1,src2) mips_format_r(c,17,MIPS_FMT_DOUBLE,src2,src1,0,(3<<4)|(cond))
|
||||
#define mips_fbfalse(c,offset) mips_format_i(c,17,8,0,offset)
|
||||
#define mips_fbfalsel(c,offset) mips_format_i(c,17,8,2,offset)
|
||||
#define mips_fbtrue(c,offset) mips_format_i(c,17,8,1,offset)
|
||||
#define mips_fbtruel(c,offset) mips_format_i(c,17,8,3,offset)
|
||||
|
||||
/* fp convert */
|
||||
#define mips_ceills(c,dest,src) mips_format_r(c,17,MIPS_FMT_SINGLE,0,src,dest,10)
|
||||
#define mips_ceilld(c,dest,src) mips_format_r(c,17,MIPS_FMT_DOUBLE,0,src,dest,10)
|
||||
#define mips_ceilws(c,dest,src) mips_format_r(c,17,MIPS_FMT_SINGLE,0,src,dest,14)
|
||||
#define mips_ceilwd(c,dest,src) mips_format_r(c,17,MIPS_FMT_DOUBLE,0,src,dest,14)
|
||||
#define mips_cvtds(c,dest,src) mips_format_r(c,17,MIPS_FMT_SINGLE,0,src,dest,33)
|
||||
#define mips_cvtdw(c,dest,src) mips_format_r(c,17,MIPS_FMT_WORD,0,src,dest,33)
|
||||
#define mips_cvtdl(c,dest,src) mips_format_r(c,17,MIPS_FMT_LONG,0,src,dest,33)
|
||||
#define mips_cvtls(c,dest,src) mips_format_r(c,17,MIPS_FMT_SINGLE,0,src,dest,37)
|
||||
#define mips_cvtld(c,dest,src) mips_format_r(c,17,MIPS_FMT_DOUBLE,0,src,dest,37)
|
||||
#define mips_cvtsd(c,dest,src) mips_format_r(c,17,MIPS_FMT_DOUBLE,0,src,dest,32)
|
||||
#define mips_cvtsw(c,dest,src) mips_format_r(c,17,MIPS_FMT_WORD,0,src,dest,32)
|
||||
#define mips_cvtsl(c,dest,src) mips_format_r(c,17,MIPS_FMT_LONG,0,src,dest,32)
|
||||
#define mips_cvtws(c,dest,src) mips_format_r(c,17,MIPS_FMT_SINGLE,0,src,dest,36)
|
||||
#define mips_cvtwd(c,dest,src) mips_format_r(c,17,MIPS_FMT_DOUBLE,0,src,dest,36)
|
||||
#define mips_floorls(c,dest,src) mips_format_r(c,17,MIPS_FMT_SINGLE,0,src,dest,11)
|
||||
#define mips_floorld(c,dest,src) mips_format_r(c,17,MIPS_FMT_DOUBLE,0,src,dest,11)
|
||||
#define mips_floorws(c,dest,src) mips_format_r(c,17,MIPS_FMT_SINGLE,0,src,dest,15)
|
||||
#define mips_floorwd(c,dest,src) mips_format_r(c,17,MIPS_FMT_DOUBLE,0,src,dest,15)
|
||||
#define mips_roundls(c,dest,src) mips_format_r(c,17,MIPS_FMT_SINGLE,0,src,dest,8)
|
||||
#define mips_roundld(c,dest,src) mips_format_r(c,17,MIPS_FMT_DOUBLE,0,src,dest,8)
|
||||
#define mips_roundws(c,dest,src) mips_format_r(c,17,MIPS_FMT_SINGLE,0,src,dest,12)
|
||||
#define mips_roundwd(c,dest,src) mips_format_r(c,17,MIPS_FMT_DOUBLE,0,src,dest,12)
|
||||
#define mips_truncls(c,dest,src) mips_format_r(c,17,MIPS_FMT_SINGLE,0,src,dest,9)
|
||||
#define mips_truncld(c,dest,src) mips_format_r(c,17,MIPS_FMT_DOUBLE,0,src,dest,9)
|
||||
#define mips_truncws(c,dest,src) mips_format_r(c,17,MIPS_FMT_SINGLE,0,src,dest,13)
|
||||
#define mips_truncwd(c,dest,src) mips_format_r(c,17,MIPS_FMT_DOUBLE,0,src,dest,13)
|
||||
|
||||
/* fp moves, loads */
|
||||
#define mips_fmovs(c,dest,src) mips_format_r(c,17,MIPS_FMT_SINGLE,0,src,dest,6)
|
||||
#define mips_fmovd(c,dest,src) mips_format_r(c,17,MIPS_FMT_DOUBLE,0,src,dest,6)
|
||||
#define mips_mfc1(c,dest,src) mips_format_r(c,17,0,dest,src,0,0)
|
||||
#define mips_mtc1(c,dest,src) mips_format_r(c,17,4,src,dest,0,0)
|
||||
#define mips_dmfc1(c,dest,src) mips_format_r(c,17,1,0,dest,src,0)
|
||||
#define mips_dmtc1(c,dest,src) mips_format_r(c,17,1,0,src,dest,0)
|
||||
#define mips_ldc1(c,dest,base,offset) mips_ldc(c,1,dest,base,offset)
|
||||
#define mips_ldxc1(c,dest,base,idx) mips_format_r(c,19,base,idx,0,dest,1)
|
||||
#define mips_lwc1(c,dest,base,offset) mips_lwc(c,1,dest,base,offset)
|
||||
#define mips_lwxc1(c,dest,base,idx) mips_format_r(c,19,base,idx,0,dest,0)
|
||||
#define mips_sdc1(c,src,base,offset) mips_sdc(c,1,src,base,offset)
|
||||
#define mips_sdxc1(c,src,base,idx) mips_format_r(c,19,base,idx,src,0,9)
|
||||
#define mips_swc1(c,src,base,offset) mips_swc(c,1,src,base,offset)
|
||||
#define mips_swxc1(c,src,base,idx) mips_format_r(c,19,base,idx,src,0,8)
|
||||
|
||||
#endif /* __MIPS_CODEGEN_H__ */
|
||||
|
||||
@@ -1,159 +0,0 @@
|
||||
#include "config.h"
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#define NO_MIPS_JIT_DEBUG
|
||||
|
||||
#include "mips-codegen.h"
|
||||
#include "mono/metadata/class.h"
|
||||
|
||||
/* don't run the resulting program, it will destroy your computer,
|
||||
* just objdump -d it to inspect we generated the correct assembler.
|
||||
*/
|
||||
|
||||
int main (int argc, char *argv[]) {
|
||||
guint32 *code, * p;
|
||||
|
||||
code = p = (guint32 *) malloc (sizeof (guint32) * 1024);
|
||||
|
||||
mips_add (p, 3, 4, 5);
|
||||
mips_addi (p, 3, 4, 5);
|
||||
mips_addu (p, 3, 4, 5);
|
||||
mips_addiu (p, 3, 4, 5);
|
||||
mips_sub (p, 3, 4, 5);
|
||||
mips_subu (p, 3, 4, 5);
|
||||
mips_dadd (p, 3, 4, 5);
|
||||
mips_daddi (p, 3, 4, 5);
|
||||
mips_daddu (p, 3, 4, 5);
|
||||
mips_daddiu (p, 3, 4, 5);
|
||||
mips_dsub (p, 3, 4, 5);
|
||||
mips_dsubu (p, 3, 4, 5);
|
||||
|
||||
mips_mult (p, 6, 7);
|
||||
mips_multu (p, 6, 7);
|
||||
mips_div (p, 6, 7);
|
||||
mips_divu (p, 6, 7);
|
||||
mips_dmult (p, 6, 7);
|
||||
mips_dmultu (p, 6, 7);
|
||||
mips_ddiv (p, 6, 7);
|
||||
mips_ddivu (p, 6, 7);
|
||||
|
||||
mips_sll (p, 3, 4, 5);
|
||||
mips_sllv (p, 3, 4, 5);
|
||||
mips_sra (p, 3, 4, 5);
|
||||
mips_srav (p, 3, 4, 5);
|
||||
mips_srl (p, 3, 4, 5);
|
||||
mips_srlv (p, 3, 4, 5);
|
||||
mips_dsll (p, 3, 4, 5);
|
||||
mips_dsll32 (p, 3, 4, 5);
|
||||
mips_dsllv (p, 3, 4, 5);
|
||||
mips_dsra (p, 3, 4, 5);
|
||||
mips_dsra32 (p, 3, 4, 5);
|
||||
mips_dsrav (p, 3, 4, 5);
|
||||
mips_dsrl (p, 3, 4, 5);
|
||||
mips_dsrl32 (p, 3, 4, 5);
|
||||
mips_dsrlv (p, 3, 4, 5);
|
||||
|
||||
mips_and (p, 8, 9, 10);
|
||||
mips_andi (p, 8, 9, 10);
|
||||
mips_nor (p, 8, 9, 10);
|
||||
mips_or (p, 8, 9, 10);
|
||||
mips_ori (p, 8, 9, 10);
|
||||
mips_xor (p, 8, 9, 10);
|
||||
mips_xori (p, 8, 9, 10);
|
||||
|
||||
mips_slt (p, 8, 9, 10);
|
||||
mips_slti (p, 8, 9, 10);
|
||||
mips_sltu (p, 8, 9, 10);
|
||||
mips_sltiu (p, 8, 9, 10);
|
||||
|
||||
mips_beq (p, 8, 9, 0xff1f);
|
||||
mips_beql (p, 8, 9, 0xff1f);
|
||||
mips_bne (p, 8, 9, 0xff1f);
|
||||
mips_bnel (p, 8, 9, 0xff1f);
|
||||
mips_bgez (p, 11, 0xff1f);
|
||||
mips_bgezal (p, 11, 0xff1f);
|
||||
mips_bgezall (p, 11, 0xff1f);
|
||||
mips_bgezl (p, 11, 0xff1f);
|
||||
mips_bgtz (p, 11, 0xff1f);
|
||||
mips_bgtzl (p, 11, 0xff1f);
|
||||
mips_blez (p, 11, 0xff1f);
|
||||
mips_blezl (p, 11, 0xff1f);
|
||||
mips_bltz (p, 11, 0xff1f);
|
||||
mips_bltzal (p, 11, 0xff1f);
|
||||
mips_bltzall (p, 11, 0xff1f);
|
||||
mips_bltzl (p, 11, 0xff1f);
|
||||
|
||||
mips_jump (p, 0xff1f);
|
||||
mips_jumpl (p, 0xff1f);
|
||||
mips_jalr (p, 12, mips_ra);
|
||||
mips_jr (p, 12);
|
||||
|
||||
mips_lb (p, 13, 14, 128);
|
||||
mips_lbu (p, 13, 14, 128);
|
||||
mips_ld (p, 13, 14, 128);
|
||||
mips_ldl (p, 13, 14, 128);
|
||||
mips_ldr (p, 13, 14, 128);
|
||||
mips_lh (p, 13, 14, 128);
|
||||
mips_lhu (p, 13, 14, 128);
|
||||
mips_ll (p, 13, 14, 128);
|
||||
mips_lld (p, 13, 14, 128);
|
||||
mips_lui (p, 13, 14, 128);
|
||||
mips_lw (p, 13, 14, 128);
|
||||
mips_lwl (p, 13, 14, 128);
|
||||
mips_lwr (p, 13, 14, 128);
|
||||
mips_lwu (p, 13, 14, 128);
|
||||
mips_sb (p, 13, 14, 128);
|
||||
mips_sc (p, 13, 14, 128);
|
||||
mips_scd (p, 13, 14, 128);
|
||||
mips_sd (p, 13, 14, 128);
|
||||
mips_sdl (p, 13, 14, 128);
|
||||
mips_sdr (p, 13, 14, 128);
|
||||
mips_sh (p, 13, 14, 128);
|
||||
mips_sw (p, 13, 14, 128);
|
||||
mips_swl (p, 13, 14, 128);
|
||||
mips_swr (p, 13, 14, 128);
|
||||
|
||||
mips_move (p, 15, 16);
|
||||
mips_nop (p);
|
||||
mips_break (p, 0);
|
||||
mips_sync (p, 0);
|
||||
mips_mfhi (p, 17);
|
||||
mips_mflo (p, 17);
|
||||
mips_mthi (p, 17);
|
||||
mips_mtlo (p, 17);
|
||||
|
||||
mips_fabsd (p, 16, 18);
|
||||
mips_fnegd (p, 16, 18);
|
||||
mips_fsqrtd (p, 16, 18);
|
||||
mips_faddd (p, 16, 18, 20);
|
||||
mips_fdivd (p, 16, 18, 20);
|
||||
mips_fmuld (p, 16, 18, 20);
|
||||
mips_fsubd (p, 16, 18, 20);
|
||||
|
||||
mips_fcmpd (p, MIPS_FPU_EQ, 18, 20);
|
||||
mips_fbfalse (p, 0xff1f);
|
||||
mips_fbfalsel (p, 0xff1f);
|
||||
mips_fbtrue (p, 0xff1f);
|
||||
mips_fbtruel (p, 0xff1f);
|
||||
|
||||
mips_ceilwd (p, 20, 22);
|
||||
mips_ceilld (p, 20, 22);
|
||||
mips_floorwd (p, 20, 22);
|
||||
mips_floorld (p, 20, 22);
|
||||
mips_roundwd (p, 20, 22);
|
||||
mips_roundld (p, 20, 22);
|
||||
mips_truncwd (p, 20, 22);
|
||||
mips_truncld (p, 20, 22);
|
||||
mips_cvtdw (p, 20, 22);
|
||||
mips_cvtds (p, 20, 22);
|
||||
mips_cvtdl (p, 20, 22);
|
||||
mips_cvtld (p, 20, 22);
|
||||
mips_cvtsd (p, 20, 22);
|
||||
mips_cvtwd (p, 20, 22);
|
||||
|
||||
mips_fmovd (p, 20, 22);
|
||||
printf ("size: %d\n", p - code);
|
||||
|
||||
return 0;
|
||||
}
|
||||
7
FFTS/Sources/FFTS/src/arch/ppc/.gitignore
vendored
7
FFTS/Sources/FFTS/src/arch/ppc/.gitignore
vendored
@@ -1,7 +0,0 @@
|
||||
/Makefile
|
||||
/Makefile.in
|
||||
/.libs
|
||||
/.deps
|
||||
/*.la
|
||||
/*.lo
|
||||
/test
|
||||
@@ -1 +0,0 @@
|
||||
EXTRA_DIST = ppc-codegen.h
|
||||
@@ -1,953 +0,0 @@
|
||||
/*
|
||||
Authors:
|
||||
Radek Doulik
|
||||
Christopher Taylor <ct_AT_clemson_DOT_edu>
|
||||
Andreas Faerber <andreas.faerber@web.de>
|
||||
|
||||
Copyright (C) 2001 Radek Doulik
|
||||
Copyright (C) 2007-2008 Andreas Faerber
|
||||
|
||||
for testing do the following: ./test | as -o test.o
|
||||
*/
|
||||
|
||||
#ifndef __MONO_PPC_CODEGEN_H__
|
||||
#define __MONO_PPC_CODEGEN_H__
|
||||
#include <glib.h>
|
||||
#include <assert.h>
|
||||
|
||||
typedef enum {
|
||||
ppc_r0 = 0,
|
||||
ppc_r1,
|
||||
ppc_sp = ppc_r1,
|
||||
ppc_r2,
|
||||
ppc_r3,
|
||||
ppc_r4,
|
||||
ppc_r5,
|
||||
ppc_r6,
|
||||
ppc_r7,
|
||||
ppc_r8,
|
||||
ppc_r9,
|
||||
ppc_r10,
|
||||
ppc_r11,
|
||||
ppc_r12,
|
||||
ppc_r13,
|
||||
ppc_r14,
|
||||
ppc_r15,
|
||||
ppc_r16,
|
||||
ppc_r17,
|
||||
ppc_r18,
|
||||
ppc_r19,
|
||||
ppc_r20,
|
||||
ppc_r21,
|
||||
ppc_r22,
|
||||
ppc_r23,
|
||||
ppc_r24,
|
||||
ppc_r25,
|
||||
ppc_r26,
|
||||
ppc_r27,
|
||||
ppc_r28,
|
||||
ppc_r29,
|
||||
ppc_r30,
|
||||
ppc_r31
|
||||
} PPCIntRegister;
|
||||
|
||||
typedef enum {
|
||||
ppc_f0 = 0,
|
||||
ppc_f1,
|
||||
ppc_f2,
|
||||
ppc_f3,
|
||||
ppc_f4,
|
||||
ppc_f5,
|
||||
ppc_f6,
|
||||
ppc_f7,
|
||||
ppc_f8,
|
||||
ppc_f9,
|
||||
ppc_f10,
|
||||
ppc_f11,
|
||||
ppc_f12,
|
||||
ppc_f13,
|
||||
ppc_f14,
|
||||
ppc_f15,
|
||||
ppc_f16,
|
||||
ppc_f17,
|
||||
ppc_f18,
|
||||
ppc_f19,
|
||||
ppc_f20,
|
||||
ppc_f21,
|
||||
ppc_f22,
|
||||
ppc_f23,
|
||||
ppc_f24,
|
||||
ppc_f25,
|
||||
ppc_f26,
|
||||
ppc_f27,
|
||||
ppc_f28,
|
||||
ppc_f29,
|
||||
ppc_f30,
|
||||
ppc_f31
|
||||
} PPCFloatRegister;
|
||||
|
||||
typedef enum {
|
||||
ppc_lr = 256,
|
||||
ppc_ctr = 256 + 32,
|
||||
ppc_xer = 32
|
||||
} PPCSpecialRegister;
|
||||
|
||||
enum {
|
||||
/* B0 operand for branches */
|
||||
PPC_BR_DEC_CTR_NONZERO_FALSE = 0,
|
||||
PPC_BR_LIKELY = 1, /* can be or'ed with the conditional variants */
|
||||
PPC_BR_DEC_CTR_ZERO_FALSE = 2,
|
||||
PPC_BR_FALSE = 4,
|
||||
PPC_BR_DEC_CTR_NONZERO_TRUE = 8,
|
||||
PPC_BR_DEC_CTR_ZERO_TRUE = 10,
|
||||
PPC_BR_TRUE = 12,
|
||||
PPC_BR_DEC_CTR_NONZERO = 16,
|
||||
PPC_BR_DEC_CTR_ZERO = 18,
|
||||
PPC_BR_ALWAYS = 20,
|
||||
/* B1 operand for branches */
|
||||
PPC_BR_LT = 0,
|
||||
PPC_BR_GT = 1,
|
||||
PPC_BR_EQ = 2,
|
||||
PPC_BR_SO = 3
|
||||
};
|
||||
|
||||
enum {
|
||||
PPC_TRAP_LT = 1,
|
||||
PPC_TRAP_GT = 2,
|
||||
PPC_TRAP_EQ = 4,
|
||||
PPC_TRAP_LT_UN = 8,
|
||||
PPC_TRAP_GT_UN = 16,
|
||||
PPC_TRAP_LE = 1 + PPC_TRAP_EQ,
|
||||
PPC_TRAP_GE = 2 + PPC_TRAP_EQ,
|
||||
PPC_TRAP_LE_UN = 8 + PPC_TRAP_EQ,
|
||||
PPC_TRAP_GE_UN = 16 + PPC_TRAP_EQ
|
||||
};
|
||||
|
||||
#define ppc_emit32(c,x) do { *((guint32 *) (c)) = GUINT32_TO_BE (x); (c) = (gpointer)((guint8 *)(c) + sizeof (guint32));} while (0)
|
||||
|
||||
#define ppc_is_imm16(val) ((((val)>> 15) == 0) || (((val)>> 15) == -1))
|
||||
#define ppc_is_uimm16(val) ((glong)(val) >= 0L && (glong)(val) <= 65535L)
|
||||
#define ppc_ha(val) (((val >> 16) + ((val & 0x8000) ? 1 : 0)) & 0xffff)
|
||||
|
||||
#define ppc_load32(c,D,v) G_STMT_START { \
|
||||
ppc_lis ((c), (D), (guint32)(v) >> 16); \
|
||||
ppc_ori ((c), (D), (D), (guint32)(v) & 0xffff); \
|
||||
} G_STMT_END
|
||||
|
||||
/* Macros to load/store pointer sized quantities */
|
||||
|
||||
#if defined(__mono_ppc64__) && !defined(__mono_ilp32__)
|
||||
|
||||
#define ppc_ldptr(c,D,d,A) ppc_ld ((c), (D), (d), (A))
|
||||
#define ppc_ldptr_update(c,D,d,A) ppc_ldu ((c), (D), (d), (A))
|
||||
#define ppc_ldptr_indexed(c,D,A,B) ppc_ldx ((c), (D), (A), (B))
|
||||
#define ppc_ldptr_update_indexed(c,D,A,B) ppc_ldux ((c), (D), (A), (B))
|
||||
|
||||
#define ppc_stptr(c,S,d,A) ppc_std ((c), (S), (d), (A))
|
||||
#define ppc_stptr_update(c,S,d,A) ppc_stdu ((c), (S), (d), (A))
|
||||
#define ppc_stptr_indexed(c,S,A,B) ppc_stdx ((c), (S), (A), (B))
|
||||
#define ppc_stptr_update_indexed(c,S,A,B) ppc_stdux ((c), (S), (A), (B))
|
||||
|
||||
#else
|
||||
|
||||
/* Same as ppc32 */
|
||||
#define ppc_ldptr(c,D,d,A) ppc_lwz ((c), (D), (d), (A))
|
||||
#define ppc_ldptr_update(c,D,d,A) ppc_lwzu ((c), (D), (d), (A))
|
||||
#define ppc_ldptr_indexed(c,D,A,B) ppc_lwzx ((c), (D), (A), (B))
|
||||
#define ppc_ldptr_update_indexed(c,D,A,B) ppc_lwzux ((c), (D), (A), (B))
|
||||
|
||||
#define ppc_stptr(c,S,d,A) ppc_stw ((c), (S), (d), (A))
|
||||
#define ppc_stptr_update(c,S,d,A) ppc_stwu ((c), (S), (d), (A))
|
||||
#define ppc_stptr_indexed(c,S,A,B) ppc_stwx ((c), (S), (A), (B))
|
||||
#define ppc_stptr_update_indexed(c,S,A,B) ppc_stwux ((c), (S), (A), (B))
|
||||
|
||||
#endif
|
||||
|
||||
/* Macros to load pointer sized immediates */
|
||||
#define ppc_load_ptr(c,D,v) ppc_load ((c),(D),(gsize)(v))
|
||||
#define ppc_load_ptr_sequence(c,D,v) ppc_load_sequence ((c),(D),(gsize)(v))
|
||||
|
||||
/* Macros to load/store regsize quantities */
|
||||
|
||||
#ifdef __mono_ppc64__
|
||||
#define ppc_ldr(c,D,d,A) ppc_ld ((c), (D), (d), (A))
|
||||
#define ppc_ldr_indexed(c,D,A,B) ppc_ldx ((c), (D), (A), (B))
|
||||
#define ppc_str(c,S,d,A) ppc_std ((c), (S), (d), (A))
|
||||
#define ppc_str_update(c,S,d,A) ppc_stdu ((c), (S), (d), (A))
|
||||
#define ppc_str_indexed(c,S,A,B) ppc_stdx ((c), (S), (A), (B))
|
||||
#define ppc_str_update_indexed(c,S,A,B) ppc_stdux ((c), (S), (A), (B))
|
||||
#else
|
||||
#define ppc_ldr(c,D,d,A) ppc_lwz ((c), (D), (d), (A))
|
||||
#define ppc_ldr_indexed(c,D,A,B) ppc_lwzx ((c), (D), (A), (B))
|
||||
#define ppc_str(c,S,d,A) ppc_stw ((c), (S), (d), (A))
|
||||
#define ppc_str_update(c,S,d,A) ppc_stwu ((c), (S), (d), (A))
|
||||
#define ppc_str_indexed(c,S,A,B) ppc_stwx ((c), (S), (A), (B))
|
||||
#define ppc_str_update_indexed(c,S,A,B) ppc_stwux ((c), (S), (A), (B))
|
||||
#endif
|
||||
|
||||
#define ppc_str_multiple(c,S,d,A) ppc_store_multiple_regs((c),(S),(d),(A))
|
||||
#define ppc_ldr_multiple(c,D,d,A) ppc_load_multiple_regs((c),(D),(d),(A))
|
||||
|
||||
/* PPC32 macros */
|
||||
|
||||
#ifndef __mono_ppc64__
|
||||
|
||||
#define ppc_load_sequence(c,D,v) ppc_load32 ((c), (D), (guint32)(v))
|
||||
|
||||
#define PPC_LOAD_SEQUENCE_LENGTH 8
|
||||
|
||||
#define ppc_load(c,D,v) G_STMT_START { \
|
||||
if (ppc_is_imm16 ((guint32)(v))) { \
|
||||
ppc_li ((c), (D), (guint16)(guint32)(v)); \
|
||||
} else { \
|
||||
ppc_load32 ((c), (D), (guint32)(v)); \
|
||||
} \
|
||||
} G_STMT_END
|
||||
|
||||
#define ppc_load_func(c,D,V) ppc_load_sequence ((c), (D), (V))
|
||||
|
||||
#define ppc_load_multiple_regs(c,D,d,A) ppc_lmw ((c), (D), (d), (A))
|
||||
|
||||
#define ppc_store_multiple_regs(c,S,d,A) ppc_stmw ((c), (S), (d), (A))
|
||||
|
||||
#define ppc_compare(c,cfrD,A,B) ppc_cmp((c), (cfrD), 0, (A), (B))
|
||||
#define ppc_compare_reg_imm(c,cfrD,A,B) ppc_cmpi((c), (cfrD), 0, (A), (B))
|
||||
#define ppc_compare_log(c,cfrD,A,B) ppc_cmpl((c), (cfrD), 0, (A), (B))
|
||||
|
||||
#define ppc_shift_left(c,A,S,B) ppc_slw((c), (S), (A), (B))
|
||||
#define ppc_shift_left_imm(c,A,S,n) ppc_slwi((c), (A), (S), (n))
|
||||
|
||||
#define ppc_shift_right_imm(c,A,S,B) ppc_srwi((c), (A), (S), (B))
|
||||
#define ppc_shift_right_arith_imm(c,A,S,B) ppc_srawi((c), (A), (S), (B))
|
||||
|
||||
#define ppc_multiply(c,D,A,B) ppc_mullw((c), (D), (A), (B))
|
||||
|
||||
#define ppc_clear_right_imm(c,A,S,n) ppc_clrrwi((c), (A), (S), (n))
|
||||
|
||||
#endif
|
||||
|
||||
#define ppc_opcode(c) ((c) >> 26)
|
||||
#define ppc_split_5_1_1(x) (((x) >> 5) & 0x1)
|
||||
#define ppc_split_5_1_5(x) ((x) & 0x1F)
|
||||
#define ppc_split_5_1(x) ((ppc_split_5_1_5(x) << 1) | ppc_split_5_1_1(x))
|
||||
|
||||
#define ppc_break(c) ppc_tw((c),31,0,0)
|
||||
#define ppc_addi(c,D,A,i) ppc_emit32 (c, (14 << 26) | ((D) << 21) | ((A) << 16) | (guint16)(i))
|
||||
#define ppc_addis(c,D,A,i) ppc_emit32 (c, (15 << 26) | ((D) << 21) | ((A) << 16) | (guint16)(i))
|
||||
#define ppc_li(c,D,v) ppc_addi (c, D, 0, (guint16)(v))
|
||||
#define ppc_lis(c,D,v) ppc_addis (c, D, 0, (guint16)(v))
|
||||
#define ppc_lwz(c,D,d,A) ppc_emit32 (c, (32 << 26) | ((D) << 21) | ((A) << 16) | (guint16)(d))
|
||||
#define ppc_lhz(c,D,d,A) ppc_emit32 (c, (40 << 26) | ((D) << 21) | ((A) << 16) | (guint16)(d))
|
||||
#define ppc_lbz(c,D,d,A) ppc_emit32 (c, (34 << 26) | ((D) << 21) | ((A) << 16) | (guint16)(d))
|
||||
#define ppc_stw(c,S,d,A) ppc_emit32 (c, (36 << 26) | ((S) << 21) | ((A) << 16) | (guint16)(d))
|
||||
#define ppc_sth(c,S,d,A) ppc_emit32 (c, (44 << 26) | ((S) << 21) | ((A) << 16) | (guint16)(d))
|
||||
#define ppc_stb(c,S,d,A) ppc_emit32 (c, (38 << 26) | ((S) << 21) | ((A) << 16) | (guint16)(d))
|
||||
#define ppc_stwu(c,s,d,A) ppc_emit32 (c, (37 << 26) | ((s) << 21) | ((A) << 16) | (guint16)(d))
|
||||
#define ppc_or(c,a,s,b) ppc_emit32 (c, (31 << 26) | ((s) << 21) | ((a) << 16) | ((b) << 11) | 888)
|
||||
#define ppc_mr(c,a,s) ppc_or (c, a, s, s)
|
||||
#define ppc_ori(c,S,A,ui) ppc_emit32 (c, (24 << 26) | ((S) << 21) | ((A) << 16) | (guint16)(ui))
|
||||
#define ppc_nop(c) ppc_ori (c, 0, 0, 0)
|
||||
#define ppc_mfspr(c,D,spr) ppc_emit32 (c, (31 << 26) | ((D) << 21) | ((spr) << 11) | (339 << 1))
|
||||
#define ppc_mflr(c,D) ppc_mfspr (c, D, ppc_lr)
|
||||
#define ppc_mtspr(c,spr,S) ppc_emit32 (c, (31 << 26) | ((S) << 21) | ((spr) << 11) | (467 << 1))
|
||||
#define ppc_mtlr(c,S) ppc_mtspr (c, ppc_lr, S)
|
||||
#define ppc_mtctr(c,S) ppc_mtspr (c, ppc_ctr, S)
|
||||
#define ppc_mtxer(c,S) ppc_mtspr (c, ppc_xer, S)
|
||||
|
||||
#define ppc_b(c,li) ppc_emit32 (c, (18 << 26) | ((li) << 2))
|
||||
#define ppc_bl(c,li) ppc_emit32 (c, (18 << 26) | ((li) << 2) | 1)
|
||||
#define ppc_ba(c,li) ppc_emit32 (c, (18 << 26) | ((li) << 2) | 2)
|
||||
#define ppc_bla(c,li) ppc_emit32 (c, (18 << 26) | ((li) << 2) | 3)
|
||||
#define ppc_blrl(c) ppc_emit32 (c, 0x4e800021)
|
||||
#define ppc_blr(c) ppc_emit32 (c, 0x4e800020)
|
||||
|
||||
#define ppc_lfs(c,D,d,A) ppc_emit32 (c, (48 << 26) | ((D) << 21) | ((A) << 16) | (guint16)(d))
|
||||
#define ppc_lfd(c,D,d,A) ppc_emit32 (c, (50 << 26) | ((D) << 21) | ((A) << 16) | (guint16)(d))
|
||||
#define ppc_stfs(c,S,d,a) ppc_emit32 (c, (52 << 26) | ((S) << 21) | ((a) << 16) | (guint16)(d))
|
||||
#define ppc_stfd(c,S,d,a) ppc_emit32 (c, (54 << 26) | ((S) << 21) | ((a) << 16) | (guint16)(d))
|
||||
|
||||
/***********************************************************************
|
||||
The macros below were tapped out by Christopher Taylor <ct_AT_clemson_DOT_edu>
|
||||
from 18 November 2002 to 19 December 2002.
|
||||
|
||||
Special thanks to rodo, lupus, dietmar, miguel, and duncan for patience,
|
||||
and motivation.
|
||||
|
||||
The macros found in this file are based on the assembler instructions found
|
||||
in Motorola and Digital DNA's:
|
||||
|
||||
"Programming Enviornments Manual For 32-bit Implementations of the PowerPC Architecture"
|
||||
|
||||
MPCFPE32B/AD
|
||||
12/2001
|
||||
REV2
|
||||
|
||||
see pages 326 - 524 for detailed information regarding each instruction
|
||||
|
||||
Also see the "Ximian Copyright Agreement, 2002" for more information regarding
|
||||
my and Ximian's copyright to this code. ;)
|
||||
*************************************************************************/
|
||||
|
||||
#define ppc_addx(c,D,A,B,OE,Rc) ppc_emit32(c, (31 << 26) | ((D) << 21) | ((A) << 16) | ((B) << 11) | (OE << 10) | (266 << 1) | Rc)
|
||||
#define ppc_add(c,D,A,B) ppc_addx(c,D,A,B,0,0)
|
||||
#define ppc_addd(c,D,A,B) ppc_addx(c,D,A,B,0,1)
|
||||
#define ppc_addo(c,D,A,B) ppc_addx(c,D,A,B,1,0)
|
||||
#define ppc_addod(c,D,A,B) ppc_addx(c,D,A,B,1,1)
|
||||
|
||||
#define ppc_addcx(c,D,A,B,OE,Rc) ppc_emit32(c, (31 << 26) | ((D) << 21) | ((A) << 16) | ((B) << 11) | (OE << 10) | (10 << 1) | Rc)
|
||||
#define ppc_addc(c,D,A,B) ppc_addcx(c,D,A,B,0,0)
|
||||
#define ppc_addcd(c,D,A,B) ppc_addcx(c,D,A,B,0,1)
|
||||
#define ppc_addco(c,D,A,B) ppc_addcx(c,D,A,B,1,0)
|
||||
#define ppc_addcod(c,D,A,B) ppc_addcx(c,D,A,B,1,1)
|
||||
|
||||
#define ppc_addex(c,D,A,B,OE,Rc) ppc_emit32(c, (31 << 26) | ((D) << 21) | ((A) << 16) | ((B) << 11) | (OE << 10) | (138 << 1) | Rc)
|
||||
#define ppc_adde(c,D,A,B) ppc_addex(c,D,A,B,0,0)
|
||||
#define ppc_added(c,D,A,B) ppc_addex(c,D,A,B,0,1)
|
||||
#define ppc_addeo(c,D,A,B) ppc_addex(c,D,A,B,1,0)
|
||||
#define ppc_addeod(c,D,A,B) ppc_addex(c,D,A,B,1,1)
|
||||
|
||||
#define ppc_addic(c,D,A,i) ppc_emit32(c, (12 << 26) | ((D) << 21) | ((A) << 16) | (guint16)(i))
|
||||
#define ppc_addicd(c,D,A,i) ppc_emit32(c, (13 << 26) | ((D) << 21) | ((A) << 16) | (guint16)(i))
|
||||
|
||||
#define ppc_addmex(c,D,A,OE,RC) ppc_emit32(c, (31 << 26) | ((D) << 21 ) | ((A) << 16) | (0 << 11) | ((OE) << 10) | (234 << 1) | RC)
|
||||
#define ppc_addme(c,D,A) ppc_addmex(c,D,A,0,0)
|
||||
#define ppc_addmed(c,D,A) ppc_addmex(c,D,A,0,1)
|
||||
#define ppc_addmeo(c,D,A) ppc_addmex(c,D,A,1,0)
|
||||
#define ppc_addmeod(c,D,A) ppc_addmex(c,D,A,1,1)
|
||||
|
||||
#define ppc_addzex(c,D,A,OE,RC) ppc_emit32(c, (31 << 26) | ((D) << 21 ) | ((A) << 16) | (0 << 11) | ((OE) << 10) | (202 << 1) | RC)
|
||||
#define ppc_addze(c,D,A) ppc_addzex(c,D,A,0,0)
|
||||
#define ppc_addzed(c,D,A) ppc_addzex(c,D,A,0,1)
|
||||
#define ppc_addzeo(c,D,A) ppc_addzex(c,D,A,1,0)
|
||||
#define ppc_addzeod(c,D,A) ppc_addzex(c,D,A,1,1)
|
||||
|
||||
#define ppc_andx(c,S,A,B,RC) ppc_emit32(c, (31 << 26) | ((S) << 21 ) | ((A) << 16) | ((B) << 11) | (28 << 1) | RC)
|
||||
#define ppc_and(c,S,A,B) ppc_andx(c,S,A,B,0)
|
||||
#define ppc_andd(c,S,A,B) ppc_andx(c,S,A,B,1)
|
||||
|
||||
#define ppc_andcx(c,S,A,B,RC) ppc_emit32(c, (31 << 26) | ((S) << 21 ) | ((A) << 16) | ((B) << 11) | (60 << 1) | RC)
|
||||
#define ppc_andc(c,S,A,B) ppc_andcx(c,S,A,B,0)
|
||||
#define ppc_andcd(c,S,A,B) ppc_andcx(c,S,A,B,1)
|
||||
|
||||
#define ppc_andid(c,S,A,ui) ppc_emit32(c, (28 << 26) | ((S) << 21 ) | ((A) << 16) | ((guint16)(ui)))
|
||||
#define ppc_andisd(c,S,A,ui) ppc_emit32(c, (29 << 26) | ((S) << 21 ) | ((A) << 16) | ((guint16)(ui)))
|
||||
|
||||
#define ppc_bcx(c,BO,BI,BD,AA,LK) ppc_emit32(c, (16 << 26) | (BO << 21 )| (BI << 16) | (BD << 2) | ((AA) << 1) | LK)
|
||||
#define ppc_bc(c,BO,BI,BD) ppc_bcx(c,BO,BI,BD,0,0)
|
||||
#define ppc_bca(c,BO,BI,BD) ppc_bcx(c,BO,BI,BD,1,0)
|
||||
#define ppc_bcl(c,BO,BI,BD) ppc_bcx(c,BO,BI,BD,0,1)
|
||||
#define ppc_bcla(c,BO,BI,BD) ppc_bcx(c,BO,BI,BD,1,1)
|
||||
|
||||
#define ppc_bcctrx(c,BO,BI,LK) ppc_emit32(c, (19 << 26) | (BO << 21 )| (BI << 16) | (0 << 11) | (528 << 1) | LK)
|
||||
#define ppc_bcctr(c,BO,BI) ppc_bcctrx(c,BO,BI,0)
|
||||
#define ppc_bcctrl(c,BO,BI) ppc_bcctrx(c,BO,BI,1)
|
||||
|
||||
#define ppc_bnectrp(c,BO,BI) ppc_bcctr(c,BO,BI)
|
||||
#define ppc_bnectrlp(c,BO,BI) ppc_bcctr(c,BO,BI)
|
||||
|
||||
#define ppc_bclrx(c,BO,BI,BH,LK) ppc_emit32(c, (19 << 26) | ((BO) << 21 )| ((BI) << 16) | (0 << 13) | ((BH) << 11) | (16 << 1) | (LK))
|
||||
#define ppc_bclr(c,BO,BI,BH) ppc_bclrx(c,BO,BI,BH,0)
|
||||
#define ppc_bclrl(c,BO,BI,BH) ppc_bclrx(c,BO,BI,BH,1)
|
||||
|
||||
#define ppc_bnelrp(c,BO,BI) ppc_bclr(c,BO,BI,0)
|
||||
#define ppc_bnelrlp(c,BO,BI) ppc_bclr(c,BO,BI,0)
|
||||
|
||||
#define ppc_cmp(c,cfrD,L,A,B) ppc_emit32(c, (31 << 26) | ((cfrD) << 23) | (0 << 22) | ((L) << 21) | ((A) << 16) | ((B) << 11) | (0 << 1) | 0)
|
||||
#define ppc_cmpi(c,cfrD,L,A,B) ppc_emit32(c, (11 << 26) | (cfrD << 23) | (0 << 22) | (L << 21) | (A << 16) | (guint16)(B))
|
||||
#define ppc_cmpl(c,cfrD,L,A,B) ppc_emit32(c, (31 << 26) | ((cfrD) << 23) | (0 << 22) | ((L) << 21) | ((A) << 16) | ((B) << 11) | (32 << 1) | 0)
|
||||
#define ppc_cmpli(c,cfrD,L,A,B) ppc_emit32(c, (10 << 26) | (cfrD << 23) | (0 << 22) | (L << 21) | (A << 16) | (guint16)(B))
|
||||
#define ppc_cmpw(c,cfrD,A,B) ppc_cmp(c, (cfrD), 0, (A), (B))
|
||||
|
||||
#define ppc_cntlzwx(c,S,A,Rc) ppc_emit32(c, (31 << 26) | (S << 21) | (A << 16) | (0 << 11) | (26 << 1) | Rc)
|
||||
#define ppc_cntlzw(c,S,A) ppc_cntlzwx(c,S,A,0)
|
||||
#define ppc_cntlzwd(c,S,A) ppc_cntlzwx(c,S,A,1)
|
||||
|
||||
#define ppc_crand(c,D,A,B) ppc_emit32(c, (19 << 26) | (D << 21) | (A << 16) | (B << 11) | (257 << 1) | 0)
|
||||
#define ppc_crandc(c,D,A,B) ppc_emit32(c, (19 << 26) | (D << 21) | (A << 16) | (B << 11) | (129 << 1) | 0)
|
||||
#define ppc_creqv(c,D,A,B) ppc_emit32(c, (19 << 26) | (D << 21) | (A << 16) | (B << 11) | (289 << 1) | 0)
|
||||
#define ppc_crnand(c,D,A,B) ppc_emit32(c, (19 << 26) | (D << 21) | (A << 16) | (B << 11) | (225 << 1) | 0)
|
||||
#define ppc_crnor(c,D,A,B) ppc_emit32(c, (19 << 26) | (D << 21) | (A << 16) | (B << 11) | (33 << 1) | 0)
|
||||
#define ppc_cror(c,D,A,B) ppc_emit32(c, (19 << 26) | (D << 21) | (A << 16) | (B << 11) | (449 << 1) | 0)
|
||||
#define ppc_crorc(c,D,A,B) ppc_emit32(c, (19 << 26) | (D << 21) | (A << 16) | (B << 11) | (417 << 1) | 0)
|
||||
#define ppc_crxor(c,D,A,B) ppc_emit32(c, (19 << 26) | (D << 21) | (A << 16) | (B << 11) | (193 << 1) | 0)
|
||||
|
||||
#define ppc_dcba(c,A,B) ppc_emit32(c, (31 << 26) | (0 << 21) | (A << 16) | (B << 11) | (758 << 1) | 0)
|
||||
#define ppc_dcbf(c,A,B) ppc_emit32(c, (31 << 26) | (0 << 21) | (A << 16) | (B << 11) | (86 << 1) | 0)
|
||||
#define ppc_dcbi(c,A,B) ppc_emit32(c, (31 << 26) | (0 << 21) | (A << 16) | (B << 11) | (470 << 1) | 0)
|
||||
#define ppc_dcbst(c,A,B) ppc_emit32(c, (31 << 26) | (0 << 21) | (A << 16) | (B << 11) | (54 << 1) | 0)
|
||||
#define ppc_dcbt(c,A,B) ppc_emit32(c, (31 << 26) | (0 << 21) | (A << 16) | (B << 11) | (278 << 1) | 0)
|
||||
#define ppc_dcbtst(c,A,B) ppc_emit32(c, (31 << 26) | (0 << 21) | (A << 16) | (B << 11) | (246 << 1) | 0)
|
||||
#define ppc_dcbz(c,A,B) ppc_emit32(c, (31 << 26) | (0 << 21) | (A << 16) | (B << 11) | (1014 << 1) | 0)
|
||||
|
||||
#define ppc_divwx(c,D,A,B,OE,Rc) ppc_emit32(c, (31 << 26) | (D << 21) | (A << 16) | (B << 11) | (OE << 10) | (491 << 1) | Rc)
|
||||
#define ppc_divw(c,D,A,B) ppc_divwx(c,D,A,B,0,0)
|
||||
#define ppc_divwd(c,D,A,B) ppc_divwx(c,D,A,B,0,1)
|
||||
#define ppc_divwo(c,D,A,B) ppc_divwx(c,D,A,B,1,0)
|
||||
#define ppc_divwod(c,D,A,B) ppc_divwx(c,D,A,B,1,1)
|
||||
|
||||
#define ppc_divwux(c,D,A,B,OE,Rc) ppc_emit32(c, (31 << 26) | (D << 21) | (A << 16) | (B << 11) | (OE << 10) | (459 << 1) | Rc)
|
||||
#define ppc_divwu(c,D,A,B) ppc_divwux(c,D,A,B,0,0)
|
||||
#define ppc_divwud(c,D,A,B) ppc_divwux(c,D,A,B,0,1)
|
||||
#define ppc_divwuo(c,D,A,B) ppc_divwux(c,D,A,B,1,0)
|
||||
#define ppc_divwuod(c,D,A,B) ppc_divwux(c,D,A,B,1,1)
|
||||
|
||||
#define ppc_eciwx(c,D,A,B) ppc_emit32(c, (31 << 26) | (D << 21) | (A << 16) | (B << 11) | (310 << 1) | 0)
|
||||
#define ppc_ecowx(c,S,A,B) ppc_emit32(c, (31 << 26) | (S << 21) | (A << 16) | (B << 11) | (438 << 1) | 0)
|
||||
#define ppc_eieio(c) ppc_emit32(c, (31 << 26) | (0 << 21) | (0 << 16) | (0 << 11) | (854 << 1) | 0)
|
||||
|
||||
#define ppc_eqvx(c,A,S,B,Rc) ppc_emit32(c, (31 << 26) | (S << 21) | (A << 16) | (B << 11) | (284 << 1) | Rc)
|
||||
#define ppc_eqv(c,A,S,B) ppc_eqvx(c,A,S,B,0)
|
||||
#define ppc_eqvd(c,A,S,B) ppc_eqvx(c,A,S,B,1)
|
||||
|
||||
#define ppc_extsbx(c,A,S,Rc) ppc_emit32(c, (31 << 26) | (S << 21) | (A << 16) | (0 << 11) | (954 << 1) | Rc)
|
||||
#define ppc_extsb(c,A,S) ppc_extsbx(c,A,S,0)
|
||||
#define ppc_extsbd(c,A,S) ppc_extsbx(c,A,S,1)
|
||||
|
||||
#define ppc_extshx(c,A,S,Rc) ppc_emit32(c, (31 << 26) | (S << 21) | (A << 16) | (0 << 11) | (922 << 1) | Rc)
|
||||
#define ppc_extsh(c,A,S) ppc_extshx(c,A,S,0)
|
||||
#define ppc_extshd(c,A,S) ppc_extshx(c,A,S,1)
|
||||
|
||||
#define ppc_fabsx(c,D,B,Rc) ppc_emit32(c, (63 << 26) | (D << 21) | (0 << 16) | (B << 11) | (264 << 1) | Rc)
|
||||
#define ppc_fabs(c,D,B) ppc_fabsx(c,D,B,0)
|
||||
#define ppc_fabsd(c,D,B) ppc_fabsx(c,D,B,1)
|
||||
|
||||
#define ppc_faddx(c,D,A,B,Rc) ppc_emit32(c, (63 << 26) | (D << 21) | (A << 16) | (B << 11) | (0 << 6) | (21 << 1) | Rc)
|
||||
#define ppc_fadd(c,D,A,B) ppc_faddx(c,D,A,B,0)
|
||||
#define ppc_faddd(c,D,A,B) ppc_faddx(c,D,A,B,1)
|
||||
|
||||
#define ppc_faddsx(c,D,A,B,Rc) ppc_emit32(c, (59 << 26) | (D << 21) | (A << 16) | (B << 11) | (0 << 6) | (21 << 1) | Rc)
|
||||
#define ppc_fadds(c,D,A,B) ppc_faddsx(c,D,A,B,0)
|
||||
#define ppc_faddsd(c,D,A,B) ppc_faddsx(c,D,A,B,1)
|
||||
|
||||
#define ppc_fcmpo(c,crfD,A,B) ppc_emit32(c, (63 << 26) | (crfD << 23) | (0 << 21) | (A << 16) | (B << 11) | (32 << 1) | 0)
|
||||
#define ppc_fcmpu(c,crfD,A,B) ppc_emit32(c, (63 << 26) | (crfD << 23) | (0 << 21) | (A << 16) | (B << 11) | (0 << 1) | 0)
|
||||
|
||||
#define ppc_fctiwx(c,D,B,Rc) ppc_emit32(c, (63 << 26) | (D << 21) | (0 << 16) | (B << 11) | (14 << 1) | Rc)
|
||||
#define ppc_fctiw(c,D,B) ppc_fctiwx(c,D,B,0)
|
||||
#define ppc_fctiwd(c,D,B) ppc_fctiwx(c,D,B,1)
|
||||
|
||||
#define ppc_fctiwzx(c,D,B,Rc) ppc_emit32(c, (63 << 26) | (D << 21) | (0 << 16) | (B << 11) | (15 << 1) | Rc)
|
||||
#define ppc_fctiwz(c,D,B) ppc_fctiwzx(c,D,B,0)
|
||||
#define ppc_fctiwzd(c,D,B) ppc_fctiwzx(c,D,B,1)
|
||||
|
||||
#define ppc_fdivx(c,D,A,B,Rc) ppc_emit32(c, (63 << 26) | (D << 21) | (A << 16) | (B << 11) | (0 << 6) | (18 << 1) | Rc)
|
||||
#define ppc_fdiv(c,D,A,B) ppc_fdivx(c,D,A,B,0)
|
||||
#define ppc_fdivd(c,D,A,B) ppc_fdivx(c,D,A,B,1)
|
||||
|
||||
#define ppc_fdivsx(c,D,A,B,Rc) ppc_emit32(c, (59 << 26) | (D << 21) | (A << 16) | (B << 11) | (0 << 6) | (18 << 1) | Rc)
|
||||
#define ppc_fdivs(c,D,A,B) ppc_fdivsx(c,D,A,B,0)
|
||||
#define ppc_fdivsd(c,D,A,B) ppc_fdivsx(c,D,A,B,1)
|
||||
|
||||
#define ppc_fmaddx(c,D,A,B,C,Rc) ppc_emit32(c, (63 << 26) | (D << 21) | (A << 16) | (B << 11) | (C << 6) | (29 << 1) | Rc)
|
||||
#define ppc_fmadd(c,D,A,B,C) ppc_fmaddx(c,D,A,B,C,0)
|
||||
#define ppc_fmaddd(c,D,A,B,C) ppc_fmaddx(c,D,A,B,C,1)
|
||||
|
||||
#define ppc_fmaddsx(c,D,A,B,C,Rc) ppc_emit32(c, (59 << 26) | (D << 21) | (A << 16) | (B << 11) | (C << 6) | (29 << 1) | Rc)
|
||||
#define ppc_fmadds(c,D,A,B,C) ppc_fmaddsx(c,D,A,B,C,0)
|
||||
#define ppc_fmaddsd(c,D,A,B,C) ppc_fmaddsx(c,D,A,B,C,1)
|
||||
|
||||
#define ppc_fmrx(c,D,B,Rc) ppc_emit32(c, (63 << 26) | (D << 21) | (0 << 16) | (B << 11) | (72 << 1) | Rc)
|
||||
#define ppc_fmr(c,D,B) ppc_fmrx(c,D,B,0)
|
||||
#define ppc_fmrd(c,D,B) ppc_fmrx(c,D,B,1)
|
||||
|
||||
#define ppc_fmsubx(c,D,A,C,B,Rc) ppc_emit32(c, (63 << 26) | (D << 21) | (A << 16) | (B << 11) | (C << 6) | (28 << 1) | Rc)
|
||||
#define ppc_fmsub(c,D,A,C,B) ppc_fmsubx(c,D,A,C,B,0)
|
||||
#define ppc_fmsubd(c,D,A,C,B) ppc_fmsubx(c,D,A,C,B,1)
|
||||
|
||||
#define ppc_fmsubsx(c,D,A,C,B,Rc) ppc_emit32(c, (59 << 26) | (D << 21) | (A << 16) | (B << 11) | (C << 6) | (28 << 1) | Rc)
|
||||
#define ppc_fmsubs(c,D,A,C,B) ppc_fmsubsx(c,D,A,C,B,0)
|
||||
#define ppc_fmsubsd(c,D,A,C,B) ppc_fmsubsx(c,D,A,C,B,1)
|
||||
|
||||
#define ppc_fmulx(c,D,A,C,Rc) ppc_emit32(c, (63 << 26) | (D << 21) | (A << 16) | (0 << 11) | (C << 6) | (25 << 1) | Rc)
|
||||
#define ppc_fmul(c,D,A,C) ppc_fmulx(c,D,A,C,0)
|
||||
#define ppc_fmuld(c,D,A,C) ppc_fmulx(c,D,A,C,1)
|
||||
|
||||
#define ppc_fmulsx(c,D,A,C,Rc) ppc_emit32(c, (59 << 26) | (D << 21) | (A << 16) | (0 << 11) | (C << 6) | (25 << 1) | Rc)
|
||||
#define ppc_fmuls(c,D,A,C) ppc_fmulsx(c,D,A,C,0)
|
||||
#define ppc_fmulsd(c,D,A,C) ppc_fmulsx(c,D,A,C,1)
|
||||
|
||||
#define ppc_fnabsx(c,D,B,Rc) ppc_emit32(c, (63 << 26) | (D << 21) | (0 << 16) | (B << 11) | (136 << 1) | Rc)
|
||||
#define ppc_fnabs(c,D,B) ppc_fnabsx(c,D,B,0)
|
||||
#define ppc_fnabsd(c,D,B) ppc_fnabsx(c,D,B,1)
|
||||
|
||||
#define ppc_fnegx(c,D,B,Rc) ppc_emit32(c, (63 << 26) | (D << 21) | (0 << 16) | (B << 11) | (40 << 1) | Rc)
|
||||
#define ppc_fneg(c,D,B) ppc_fnegx(c,D,B,0)
|
||||
#define ppc_fnegd(c,D,B) ppc_fnegx(c,D,B,1)
|
||||
|
||||
#define ppc_fnmaddx(c,D,A,C,B,Rc) ppc_emit32(c, (63 << 26) | (D << 21) | (A << 16) | (B << 11) | (C << 6) | (31 << 1) | Rc)
|
||||
#define ppc_fnmadd(c,D,A,C,B) ppc_fnmaddx(c,D,A,C,B,0)
|
||||
#define ppc_fnmaddd(c,D,A,C,B) ppc_fnmaddx(c,D,A,C,B,1)
|
||||
|
||||
#define ppc_fnmaddsx(c,D,A,C,B,Rc) ppc_emit32(c, (59 << 26) | (D << 21) | (A << 16) | (B << 11) | (C << 6) | (31 << 1) | Rc)
|
||||
#define ppc_fnmadds(c,D,A,C,B) ppc_fnmaddsx(c,D,A,C,B,0)
|
||||
#define ppc_fnmaddsd(c,D,A,C,B) ppc_fnmaddsx(c,D,A,C,B,1)
|
||||
|
||||
#define ppc_fnmsubx(c,D,A,C,B,Rc) ppc_emit32(c, (63 << 26) | (D << 21) | (A << 16) | (B << 11) | (C << 6) | (30 << 1) | Rc)
|
||||
#define ppc_fnmsub(c,D,A,C,B) ppc_fnmsubx(c,D,A,C,B,0)
|
||||
#define ppc_fnmsubd(c,D,A,C,B) ppc_fnmsubx(c,D,A,C,B,1)
|
||||
|
||||
#define ppc_fnmsubsx(c,D,A,C,B,Rc) ppc_emit32(c, (59 << 26) | (D << 21) | (A << 16) | (B << 11) | (C << 6) | (30 << 1) | Rc)
|
||||
#define ppc_fnmsubs(c,D,A,C,B) ppc_fnmsubsx(c,D,A,C,B,0)
|
||||
#define ppc_fnmsubsd(c,D,A,C,B) ppc_fnmsubsx(c,D,A,C,B,1)
|
||||
|
||||
#define ppc_fresx(c,D,B,Rc) ppc_emit32(c, (59 << 26) | (D << 21) | (0 << 16) | (B << 11) | (0 << 6) | (24 << 1) | Rc)
|
||||
#define ppc_fres(c,D,B) ppc_fresx(c,D,B,0)
|
||||
#define ppc_fresd(c,D,B) ppc_fresx(c,D,B,1)
|
||||
|
||||
#define ppc_frspx(c,D,B,Rc) ppc_emit32(c, (63 << 26) | (D << 21) | (0 << 16) | (B << 11) | (12 << 1) | Rc)
|
||||
#define ppc_frsp(c,D,B) ppc_frspx(c,D,B,0)
|
||||
#define ppc_frspd(c,D,B) ppc_frspx(c,D,B,1)
|
||||
|
||||
#define ppc_frsqrtex(c,D,B,Rc) ppc_emit32(c, (63 << 26) | (D << 21) | (0 << 16) | (B << 11) | (0 << 6) | (26 << 1) | Rc)
|
||||
#define ppc_frsqrte(c,D,B) ppc_frsqrtex(c,D,B,0)
|
||||
#define ppc_frsqrted(c,D,B) ppc_frsqrtex(c,D,B,1)
|
||||
|
||||
#define ppc_fselx(c,D,A,C,B,Rc) ppc_emit32(c, (63 << 26) | (D << 21) | (A << 16) | (B << 11) | (C << 6) | (23 << 1) | Rc)
|
||||
#define ppc_fsel(c,D,A,C,B) ppc_fselx(c,D,A,C,B,0)
|
||||
#define ppc_fseld(c,D,A,C,B) ppc_fselx(c,D,A,C,B,1)
|
||||
|
||||
#define ppc_fsqrtx(c,D,B,Rc) ppc_emit32(c, (63 << 26) | (D << 21) | (0 << 16) | (B << 11) | (0 << 6) | (22 << 1) | Rc)
|
||||
#define ppc_fsqrt(c,D,B) ppc_fsqrtx(c,D,B,0)
|
||||
#define ppc_fsqrtd(c,D,B) ppc_fsqrtx(c,D,B,1)
|
||||
|
||||
#define ppc_fsqrtsx(c,D,B,Rc) ppc_emit32(c, (59 << 26) | (D << 21) | (0 << 16) | (B << 11) | (0 << 6) | (22 << 1) | Rc)
|
||||
#define ppc_fsqrts(c,D,B) ppc_fsqrtsx(c,D,B,0)
|
||||
#define ppc_fsqrtsd(c,D,B) ppc_fsqrtsx(c,D,B,1)
|
||||
|
||||
#define ppc_fsubx(c,D,A,B,Rc) ppc_emit32(c, (63 << 26) | (D << 21) | (A << 16) | (B << 11) | (0 << 6) | (20 << 1) | Rc)
|
||||
#define ppc_fsub(c,D,A,B) ppc_fsubx(c,D,A,B,0)
|
||||
#define ppc_fsubd(c,D,A,B) ppc_fsubx(c,D,A,B,1)
|
||||
|
||||
#define ppc_fsubsx(c,D,A,B,Rc) ppc_emit32(c, (59 << 26) | (D << 21) | (A << 16) | (B << 11) | (0 << 6) | (20 << 1) | Rc)
|
||||
#define ppc_fsubs(c,D,A,B) ppc_fsubsx(c,D,A,B,0)
|
||||
#define ppc_fsubsd(c,D,A,B) ppc_fsubsx(c,D,A,B,1)
|
||||
|
||||
#define ppc_icbi(c,A,B) ppc_emit32(c, (31 << 26) | (0 << 21) | (A << 16) | (B << 11) | (982 << 1) | 0)
|
||||
|
||||
#define ppc_isync(c) ppc_emit32(c, (19 << 26) | (0 << 11) | (150 << 1) | 0)
|
||||
|
||||
#define ppc_lbzu(c,D,d,A) ppc_emit32(c, (35 << 26) | (D << 21) | (A << 16) | (guint16)d)
|
||||
#define ppc_lbzux(c,D,A,B) ppc_emit32(c, (31 << 26) | (D << 21) | (A << 16) | (B << 11) | (119 << 1) | 0)
|
||||
#define ppc_lbzx(c,D,A,B) ppc_emit32(c, (31 << 26) | (D << 21) | (A << 16) | (B << 11) | (87 << 1) | 0)
|
||||
|
||||
#define ppc_lfdu(c,D,d,A) ppc_emit32(c, (51 << 26) | (D << 21) | (A << 16) | (guint16)d)
|
||||
#define ppc_lfdux(c,D,A,B) ppc_emit32(c, (31 << 26) | (D << 21) | (A << 16) | (B << 11) | (631 << 1) | 0)
|
||||
#define ppc_lfdx(c,D,A,B) ppc_emit32(c, (31 << 26) | (D << 21) | (A << 16) | (B << 11) | (599 << 1) | 0)
|
||||
|
||||
#define ppc_lfsu(c,D,d,A) ppc_emit32(c, (49 << 26) | (D << 21) | (A << 16) | (guint16)d)
|
||||
#define ppc_lfsux(c,D,A,B) ppc_emit32(c, (31 << 26) | (D << 21) | (A << 16) | (B << 11) | (567 << 1) | 0)
|
||||
#define ppc_lfsx(c,D,A,B) ppc_emit32(c, (31 << 26) | (D << 21) | (A << 16) | (B << 11) | (535 << 1) | 0)
|
||||
|
||||
#define ppc_lha(c,D,d,A) ppc_emit32(c, (42 << 26) | (D << 21) | (A << 16) | (guint16)d)
|
||||
#define ppc_lhau(c,D,d,A) ppc_emit32(c, (43 << 26) | (D << 21) | (A << 16) | (guint16)d)
|
||||
#define ppc_lhaux(c,D,A,B) ppc_emit32(c, (31 << 26) | (D << 21) | (A << 16) | (B << 11) | (375 << 1) | 0)
|
||||
#define ppc_lhax(c,D,A,B) ppc_emit32(c, (31 << 26) | (D << 21) | (A << 16) | (B << 11) | (343 << 1) | 0)
|
||||
#define ppc_lhbrx(c,D,A,B) ppc_emit32(c, (31 << 26) | (D << 21) | (A << 16) | (B << 11) | (790 << 1) | 0)
|
||||
#define ppc_lhzu(c,D,d,A) ppc_emit32(c, (41 << 26) | (D << 21) | (A << 16) | (guint16)d)
|
||||
|
||||
#define ppc_lhzux(c,D,A,B) ppc_emit32(c, (31 << 26) | (D << 21) | (A << 16) | (B << 11) | (311 << 1) | 0)
|
||||
#define ppc_lhzx(c,D,A,B) ppc_emit32(c, (31 << 26) | (D << 21) | (A << 16) | (B << 11) | (279 << 1) | 0)
|
||||
|
||||
#define ppc_lmw(c,D,d,A) ppc_emit32(c, (46 << 26) | (D << 21) | (A << 16) | (guint16)d)
|
||||
|
||||
#define ppc_lswi(c,D,A,NB) ppc_emit32(c, (31 << 26) | (D << 21) | (A << 16) | (NB << 11) | (597 << 1) | 0)
|
||||
#define ppc_lswx(c,D,A,B) ppc_emit32(c, (31 << 26) | (D << 21) | (A << 16) | (B << 11) | (533 << 1) | 0)
|
||||
#define ppc_lwarx(c,D,A,B) ppc_emit32(c, (31 << 26) | (D << 21) | (A << 16) | (B << 11) | (20 << 1) | 0)
|
||||
#define ppc_lwbrx(c,D,A,B) ppc_emit32(c, (31 << 26) | (D << 21) | (A << 16) | (B << 11) | (534 << 1) | 0)
|
||||
|
||||
#define ppc_lwzu(c,D,d,A) ppc_emit32(c, (33 << 26) | (D << 21) | (A << 16) | (guint16)d)
|
||||
#define ppc_lwzux(c,D,A,B) ppc_emit32(c, (31 << 26) | (D << 21) | (A << 16) | (B << 11) | (55 << 1) | 0)
|
||||
#define ppc_lwzx(c,D,A,B) ppc_emit32(c, (31 << 26) | (D << 21) | (A << 16) | (B << 11) | (23 << 1) | 0)
|
||||
|
||||
#define ppc_mcrf(c,crfD,crfS) ppc_emit32(c, (19 << 26) | (crfD << 23) | (0 << 21) | (crfS << 18) | 0)
|
||||
#define ppc_mcrfs(c,crfD,crfS) ppc_emit32(c, (63 << 26) | (crfD << 23) | (0 << 21) | (crfS << 18) | (0 << 16) | (64 << 1) | 0)
|
||||
#define ppc_mcrxr(c,crfD) ppc_emit32(c, (31 << 26) | (crfD << 23) | (0 << 16) | (512 << 1) | 0)
|
||||
|
||||
#define ppc_mfcr(c,D) ppc_emit32(c, (31 << 26) | (D << 21) | (0 << 16) | (19 << 1) | 0)
|
||||
#define ppc_mffsx(c,D,Rc) ppc_emit32(c, (63 << 26) | (D << 21) | (0 << 16) | (583 << 1) | Rc)
|
||||
#define ppc_mffs(c,D) ppc_mffsx(c,D,0)
|
||||
#define ppc_mffsd(c,D) ppc_mffsx(c,D,1)
|
||||
#define ppc_mfmsr(c,D) ppc_emit32(c, (31 << 26) | (D << 21) | (0 << 16) | (83 << 1) | 0)
|
||||
#define ppc_mfsr(c,D,SR) ppc_emit32(c, (31 << 26) | (D << 21) | (0 << 20) | (SR << 16) | (0 << 11) | (595 << 1) | 0)
|
||||
#define ppc_mfsrin(c,D,B) ppc_emit32(c, (31 << 26) | (D << 21) | (0 << 16) | (B << 11) | (659 << 1) | 0)
|
||||
#define ppc_mftb(c,D,TBR) ppc_emit32(c, (31 << 26) | (D << 21) | (TBR << 11) | (371 << 1) | 0)
|
||||
|
||||
#define ppc_mtcrf(c,CRM,S) ppc_emit32(c, (31 << 26) | (S << 21) | (0 << 20) | (CRM << 12) | (0 << 11) | (144 << 1) | 0)
|
||||
|
||||
#define ppc_mtfsb0x(c,CRB,Rc) ppc_emit32(c, (63 << 26) | (CRB << 21) | (0 << 11) | (70 << 1) | Rc)
|
||||
#define ppc_mtfsb0(c,CRB) ppc_mtfsb0x(c,CRB,0)
|
||||
#define ppc_mtfsb0d(c,CRB) ppc_mtfsb0x(c,CRB,1)
|
||||
|
||||
#define ppc_mtfsb1x(c,CRB,Rc) ppc_emit32(c, (63 << 26) | (CRB << 21) | (0 << 11) | (38 << 1) | Rc)
|
||||
#define ppc_mtfsb1(c,CRB) ppc_mtfsb1x(c,CRB,0)
|
||||
#define ppc_mtfsb1d(c,CRB) ppc_mtfsb1x(c,CRB,1)
|
||||
|
||||
#define ppc_mtfsfx(c,FM,B,Rc) ppc_emit32(c, (63 << 26) | (0 << 25) | (FM << 22) | (0 << 21) | (B << 11) | (711 << 1) | Rc)
|
||||
#define ppc_mtfsf(c,FM,B) ppc_mtfsfx(c,FM,B,0)
|
||||
#define ppc_mtfsfd(c,FM,B) ppc_mtfsfx(c,FM,B,1)
|
||||
|
||||
#define ppc_mtfsfix(c,crfD,IMM,Rc) ppc_emit32(c, (63 << 26) | (crfD << 23) | (0 << 16) | (IMM << 12) | (0 << 11) | (134 << 1) | Rc)
|
||||
#define ppc_mtfsfi(c,crfD,IMM) ppc_mtfsfix(c,crfD,IMM,0)
|
||||
#define ppc_mtfsfid(c,crfD,IMM) ppc_mtfsfix(c,crfD,IMM,1)
|
||||
|
||||
#define ppc_mtmsr(c, S) ppc_emit32(c, (31 << 26) | (S << 21) | (0 << 11) | (146 << 1) | 0)
|
||||
|
||||
#define ppc_mtsr(c,SR,S) ppc_emit32(c, (31 << 26) | (S << 21) | (0 << 20) | (SR << 16) | (0 << 11) | (210 << 1) | 0)
|
||||
#define ppc_mtsrin(c,S,B) ppc_emit32(c, (31 << 26) | (S << 21) | (0 << 16) | (B << 11) | (242 << 1) | 0)
|
||||
|
||||
#define ppc_mulhwx(c,D,A,B,Rc) ppc_emit32(c, (31 << 26) | (D << 21) | (A << 16) | (B << 11) | (0 << 10) | (75 << 1) | Rc)
|
||||
#define ppc_mulhw(c,D,A,B) ppc_mulhwx(c,D,A,B,0)
|
||||
#define ppc_mulhwd(c,D,A,B) ppc_mulhwx(c,D,A,B,1)
|
||||
|
||||
#define ppc_mulhwux(c,D,A,B,Rc) ppc_emit32(c, (31 << 26) | (D << 21) | (A << 16) | (B << 11) | (0 << 10) | (11 << 1) | Rc)
|
||||
#define ppc_mulhwu(c,D,A,B) ppc_mulhwux(c,D,A,B,0)
|
||||
#define ppc_mulhwud(c,D,A,B) ppc_mulhwux(c,D,A,B,1)
|
||||
|
||||
#define ppc_mulli(c,D,A,SIMM) ppc_emit32(c, ((07) << 26) | (D << 21) | (A << 16) | (guint16)(SIMM))
|
||||
|
||||
#define ppc_mullwx(c,D,A,B,OE,Rc) ppc_emit32(c, (31 << 26) | (D << 21) | (A << 16) | (B << 11) | (OE << 10) | (235 << 1) | Rc)
|
||||
#define ppc_mullw(c,D,A,B) ppc_mullwx(c,D,A,B,0,0)
|
||||
#define ppc_mullwd(c,D,A,B) ppc_mullwx(c,D,A,B,0,1)
|
||||
#define ppc_mullwo(c,D,A,B) ppc_mullwx(c,D,A,B,1,0)
|
||||
#define ppc_mullwod(c,D,A,B) ppc_mullwx(c,D,A,B,1,1)
|
||||
|
||||
#define ppc_nandx(c,A,S,B,Rc) ppc_emit32(c, (31 << 26) | (S << 21) | (A << 16) | (B << 11) | (476 << 1) | Rc)
|
||||
#define ppc_nand(c,A,S,B) ppc_nandx(c,A,S,B,0)
|
||||
#define ppc_nandd(c,A,S,B) ppc_nandx(c,A,S,B,1)
|
||||
|
||||
#define ppc_negx(c,D,A,OE,Rc) ppc_emit32(c, (31 << 26) | (D << 21) | (A << 16) | (0 << 11) | (OE << 10) | (104 << 1) | Rc)
|
||||
#define ppc_neg(c,D,A) ppc_negx(c,D,A,0,0)
|
||||
#define ppc_negd(c,D,A) ppc_negx(c,D,A,0,1)
|
||||
#define ppc_nego(c,D,A) ppc_negx(c,D,A,1,0)
|
||||
#define ppc_negod(c,D,A) ppc_negx(c,D,A,1,1)
|
||||
|
||||
#define ppc_norx(c,A,S,B,Rc) ppc_emit32(c, (31 << 26) | (S << 21) | (A << 16) | (B << 11) | (124 << 1) | Rc)
|
||||
#define ppc_nor(c,A,S,B) ppc_norx(c,A,S,B,0)
|
||||
#define ppc_nord(c,A,S,B) ppc_norx(c,A,S,B,1)
|
||||
|
||||
#define ppc_not(c,A,S) ppc_norx(c,A,S,S,0)
|
||||
|
||||
#define ppc_orx(c,A,S,B,Rc) ppc_emit32(c, (31 << 26) | (S << 21) | (A << 16) | (B << 11) | (444 << 1) | Rc)
|
||||
#define ppc_ord(c,A,S,B) ppc_orx(c,A,S,B,1)
|
||||
|
||||
#define ppc_orcx(c,A,S,B,Rc) ppc_emit32(c, (31 << 26) | (S << 21) | (A << 16) | (B << 11) | (412 << 1) | Rc)
|
||||
#define ppc_orc(c,A,S,B) ppc_orcx(c,A,S,B,0)
|
||||
#define ppc_orcd(c,A,S,B) ppc_orcx(c,A,S,B,1)
|
||||
|
||||
#define ppc_oris(c,A,S,UIMM) ppc_emit32(c, (25 << 26) | (S << 21) | (A << 16) | (guint16)(UIMM))
|
||||
|
||||
#define ppc_rfi(c) ppc_emit32(c, (19 << 26) | (0 << 11) | (50 << 1) | 0)
|
||||
|
||||
#define ppc_rlwimix(c,A,S,SH,MB,ME,Rc) ppc_emit32(c, (20 << 26) | (S << 21) | (A << 16) | (SH << 11) | (MB << 6) | (ME << 1) | Rc)
|
||||
#define ppc_rlwimi(c,A,S,SH,MB,ME) ppc_rlwimix(c,A,S,SH,MB,ME,0)
|
||||
#define ppc_rlwimid(c,A,S,SH,MB,ME) ppc_rlwimix(c,A,S,SH,MB,ME,1)
|
||||
|
||||
#define ppc_rlwinmx(c,A,S,SH,MB,ME,Rc) ppc_emit32(c, (21 << 26) | ((S) << 21) | ((A) << 16) | ((SH) << 11) | ((MB) << 6) | ((ME) << 1) | (Rc))
|
||||
#define ppc_rlwinm(c,A,S,SH,MB,ME) ppc_rlwinmx(c,A,S,SH,MB,ME,0)
|
||||
#define ppc_rlwinmd(c,A,S,SH,MB,ME) ppc_rlwinmx(c,A,S,SH,MB,ME,1)
|
||||
#define ppc_extlwi(c,A,S,n,b) ppc_rlwinm(c,A,S, b, 0, (n) - 1)
|
||||
#define ppc_extrwi(c,A,S,n,b) ppc_rlwinm(c,A,S, (b) + (n), 32 - (n), 31)
|
||||
#define ppc_rotlwi(c,A,S,n) ppc_rlwinm(c,A,S, n, 0, 31)
|
||||
#define ppc_rotrwi(c,A,S,n) ppc_rlwinm(c,A,S, 32 - (n), 0, 31)
|
||||
#define ppc_slwi(c,A,S,n) ppc_rlwinm(c,A,S, n, 0, 31 - (n))
|
||||
#define ppc_srwi(c,A,S,n) ppc_rlwinm(c,A,S, 32 - (n), n, 31)
|
||||
#define ppc_clrlwi(c,A,S,n) ppc_rlwinm(c,A,S, 0, n, 31)
|
||||
#define ppc_clrrwi(c,A,S,n) ppc_rlwinm(c,A,S, 0, 0, 31 - (n))
|
||||
#define ppc_clrlslwi(c,A,S,b,n) ppc_rlwinm(c,A,S, n, (b) - (n), 31 - (n))
|
||||
|
||||
#define ppc_rlwnmx(c,A,S,SH,MB,ME,Rc) ppc_emit32(c, (23 << 26) | (S << 21) | (A << 16) | (SH << 11) | (MB << 6) | (ME << 1) | Rc)
|
||||
#define ppc_rlwnm(c,A,S,SH,MB,ME) ppc_rlwnmx(c,A,S,SH,MB,ME,0)
|
||||
#define ppc_rlwnmd(c,A,S,SH,MB,ME) ppc_rlwnmx(c,A,S,SH,MB,ME,1)
|
||||
|
||||
#define ppc_sc(c) ppc_emit32(c, (17 << 26) | (0 << 2) | (1 << 1) | 0)
|
||||
|
||||
#define ppc_slwx(c,S,A,B,Rc) ppc_emit32(c, (31 << 26) | (S << 21) | (A << 16) | (B << 11) | (24 << 1) | Rc)
|
||||
#define ppc_slw(c,S,A,B) ppc_slwx(c,S,A,B,0)
|
||||
#define ppc_slwd(c,S,A,B) ppc_slwx(c,S,A,B,1)
|
||||
|
||||
#define ppc_srawx(c,A,S,B,Rc) ppc_emit32(c, (31 << 26) | (S << 21) | (A << 16) | (B << 11) | (792 << 1) | Rc)
|
||||
#define ppc_sraw(c,A,S,B) ppc_srawx(c,A,S,B,0)
|
||||
#define ppc_srawd(c,A,S,B) ppc_srawx(c,A,S,B,1)
|
||||
|
||||
#define ppc_srawix(c,A,S,SH,Rc) ppc_emit32(c, (31 << 26) | (S << 21) | (A << 16) | (SH << 11) | (824 << 1) | Rc)
|
||||
#define ppc_srawi(c,A,S,B) ppc_srawix(c,A,S,B,0)
|
||||
#define ppc_srawid(c,A,S,B) ppc_srawix(c,A,S,B,1)
|
||||
|
||||
#define ppc_srwx(c,A,S,SH,Rc) ppc_emit32(c, (31 << 26) | (S << 21) | (A << 16) | (SH << 11) | (536 << 1) | Rc)
|
||||
#define ppc_srw(c,A,S,B) ppc_srwx(c,A,S,B,0)
|
||||
#define ppc_srwd(c,A,S,B) ppc_srwx(c,A,S,B,1)
|
||||
|
||||
#define ppc_stbu(c,S,d,A) ppc_emit32(c, (39 << 26) | (S << 21) | (A << 16) | (guint16)(d))
|
||||
|
||||
#define ppc_stbux(c,S,A,B) ppc_emit32(c, (31 << 26) | (S << 21) | (A << 16) | (B << 11) | (247 << 1) | 0)
|
||||
#define ppc_stbx(c,S,A,B) ppc_emit32(c, (31 << 26) | (S << 21) | (A << 16) | (B << 11) | (215 << 1) | 0)
|
||||
|
||||
#define ppc_stfdu(c,S,d,A) ppc_emit32(c, (55 << 26) | (S << 21) | (A << 16) | (guint16)(d))
|
||||
|
||||
#define ppc_stfdx(c,S,A,B) ppc_emit32(c, (31 << 26) | (S << 21) | (A << 16) | (B << 11) | (727 << 1) | 0)
|
||||
#define ppc_stfiwx(c,S,A,B) ppc_emit32(c, (31 << 26) | (S << 21) | (A << 16) | (B << 11) | (983 << 1) | 0)
|
||||
|
||||
#define ppc_stfsu(c,S,d,A) ppc_emit32(c, (53 << 26) | (S << 21) | (A << 16) | (guint16)(d))
|
||||
#define ppc_stfsux(c,S,A,B) ppc_emit32(c, (31 << 26) | (S << 21) | (A << 16) | (B << 11) | (695 << 1) | 0)
|
||||
#define ppc_stfsx(c,S,A,B) ppc_emit32(c, (31 << 26) | (S << 21) | (A << 16) | (B << 11) | (663 << 1) | 0)
|
||||
#define ppc_sthbrx(c,S,A,B) ppc_emit32(c, (31 << 26) | (S << 21) | (A << 16) | (B << 11) | (918 << 1) | 0)
|
||||
#define ppc_sthu(c,S,d,A) ppc_emit32(c, (45 << 26) | (S << 21) | (A << 16) | (guint16)(d))
|
||||
#define ppc_sthux(c,S,A,B) ppc_emit32(c, (31 << 26) | (S << 21) | (A << 16) | (B << 11) | (439 << 1) | 0)
|
||||
#define ppc_sthx(c,S,A,B) ppc_emit32(c, (31 << 26) | (S << 21) | (A << 16) | (B << 11) | (407 << 1) | 0)
|
||||
#define ppc_stmw(c,S,d,A) ppc_emit32(c, (47 << 26) | (S << 21) | (A << 16) | (guint16)d)
|
||||
#define ppc_stswi(c,S,A,NB) ppc_emit32(c, (31 << 26) | (S << 21) | (A << 16) | (NB << 11) | (725 << 1) | 0)
|
||||
#define ppc_stswx(c,S,A,NB) ppc_emit32(c, (31 << 26) | (S << 21) | (A << 16) | (NB << 11) | (661 << 1) | 0)
|
||||
#define ppc_stwbrx(c,S,A,B) ppc_emit32(c, (31 << 26) | (S << 21) | (A << 16) | (B << 11) | (662 << 1) | 0)
|
||||
#define ppc_stwcxd(c,S,A,B) ppc_emit32(c, (31 << 26) | (S << 21) | (A << 16) | (B << 11) | (150 << 1) | 1)
|
||||
#define ppc_stwux(c,S,A,B) ppc_emit32(c, (31 << 26) | (S << 21) | (A << 16) | (B << 11) | (183 << 1) | 0)
|
||||
#define ppc_stwx(c,S,A,B) ppc_emit32(c, (31 << 26) | (S << 21) | (A << 16) | (B << 11) | (151 << 1) | 0)
|
||||
|
||||
#define ppc_subfx(c,D,A,B,OE,Rc) ppc_emit32(c, (31 << 26) | (D << 21) | (A << 16) | (B << 11) | (OE << 10) | (40 << 1) | Rc)
|
||||
#define ppc_subf(c,D,A,B) ppc_subfx(c,D,A,B,0,0)
|
||||
#define ppc_subfd(c,D,A,B) ppc_subfx(c,D,A,B,0,1)
|
||||
#define ppc_subfo(c,D,A,B) ppc_subfx(c,D,A,B,1,0)
|
||||
#define ppc_subfod(c,D,A,B) ppc_subfx(c,D,A,B,1,1)
|
||||
|
||||
#define ppc_sub(c,D,A,B) ppc_subf(c,D,B,A)
|
||||
|
||||
#define ppc_subfcx(c,D,A,B,OE,Rc) ppc_emit32(c, (31 << 26) | (D << 21) | (A << 16) | (B << 11) | (OE << 10) | (8 << 1) | Rc)
|
||||
#define ppc_subfc(c,D,A,B) ppc_subfcx(c,D,A,B,0,0)
|
||||
#define ppc_subfcd(c,D,A,B) ppc_subfcx(c,D,A,B,0,1)
|
||||
#define ppc_subfco(c,D,A,B) ppc_subfcx(c,D,A,B,1,0)
|
||||
#define ppc_subfcod(c,D,A,B) ppc_subfcx(c,D,A,B,1,1)
|
||||
|
||||
#define ppc_subfex(c,D,A,B,OE,Rc) ppc_emit32(c, (31 << 26) | (D << 21) | (A << 16) | (B << 11) | (OE << 10) | (136 << 1) | Rc)
|
||||
#define ppc_subfe(c,D,A,B) ppc_subfex(c,D,A,B,0,0)
|
||||
#define ppc_subfed(c,D,A,B) ppc_subfex(c,D,A,B,0,1)
|
||||
#define ppc_subfeo(c,D,A,B) ppc_subfex(c,D,A,B,1,0)
|
||||
#define ppc_subfeod(c,D,A,B) ppc_subfex(c,D,A,B,1,1)
|
||||
|
||||
#define ppc_subfic(c,D,A,SIMM) ppc_emit32(c, (8 << 26) | (D << 21) | (A << 16) | (guint16)(SIMM))
|
||||
|
||||
#define ppc_subfmex(c,D,A,OE,Rc) ppc_emit32(c, (31 << 26) | (D << 21) | (A << 16) | (0 << 11) | (OE << 10) | (232 << 1) | Rc)
|
||||
#define ppc_subfme(c,D,A) ppc_subfmex(c,D,A,0,0)
|
||||
#define ppc_subfmed(c,D,A) ppc_subfmex(c,D,A,0,1)
|
||||
#define ppc_subfmeo(c,D,A) ppc_subfmex(c,D,A,1,0)
|
||||
#define ppc_subfmeod(c,D,A) ppc_subfmex(c,D,A,1,1)
|
||||
|
||||
#define ppc_subfzex(c,D,A,OE,Rc) ppc_emit32(c, (31 << 26) | (D << 21) | (A << 16) | (0 << 11) | (OE << 10) | (200 << 1) | Rc)
|
||||
#define ppc_subfze(c,D,A) ppc_subfzex(c,D,A,0,0)
|
||||
#define ppc_subfzed(c,D,A) ppc_subfzex(c,D,A,0,1)
|
||||
#define ppc_subfzeo(c,D,A) ppc_subfzex(c,D,A,1,0)
|
||||
#define ppc_subfzeod(c,D,A) ppc_subfzex(c,D,A,1,1)
|
||||
|
||||
#define ppc_sync(c) ppc_emit32(c, (31 << 26) | (0 << 11) | (598 << 1) | 0)
|
||||
#define ppc_tlbia(c) ppc_emit32(c, (31 << 26) | (0 << 11) | (370 << 1) | 0)
|
||||
#define ppc_tlbie(c,B) ppc_emit32(c, (31 << 26) | (0 << 16) | (B << 11) | (306 << 1) | 0)
|
||||
#define ppc_tlbsync(c) ppc_emit32(c, (31 << 26) | (0 << 11) | (566 << 1) | 0)
|
||||
|
||||
#define ppc_tw(c,TO,A,B) ppc_emit32(c, (31 << 26) | (TO << 21) | (A << 16) | (B << 11) | (4 << 1) | 0)
|
||||
#define ppc_twi(c,TO,A,SIMM) ppc_emit32(c, (3 << 26) | (TO << 21) | (A << 16) | (guint16)(SIMM))
|
||||
|
||||
#define ppc_xorx(c,A,S,B,RC) ppc_emit32(c, (31 << 26) | (S << 21) | (A << 16) | (B << 11) | (316 << 1) | RC)
|
||||
#define ppc_xor(c,A,S,B) ppc_xorx(c,A,S,B,0)
|
||||
#define ppc_xord(c,A,S,B) ppc_xorx(c,A,S,B,1)
|
||||
|
||||
#define ppc_xori(c,S,A,UIMM) ppc_emit32(c, (26 << 26) | (S << 21) | (A << 16) | (guint16)(UIMM))
|
||||
#define ppc_xoris(c,S,A,UIMM) ppc_emit32(c, (27 << 26) | (S << 21) | (A << 16) | (guint16)(UIMM))
|
||||
|
||||
/* this marks the end of my work, ct */
|
||||
|
||||
/* PPC64 */
|
||||
|
||||
/* The following FP instructions are not are available to 32-bit
|
||||
implementations (prior to PowerISA-V2.01 but are available to
|
||||
32-bit mode programs on 64-bit PowerPC implementations and all
|
||||
processors compliant with PowerISA-2.01 or later. */
|
||||
|
||||
#define ppc_fcfidx(c,D,B,Rc) ppc_emit32(c, (63 << 26) | ((D) << 21) | (0 << 16) | ((B) << 11) | (846 << 1) | (Rc))
|
||||
#define ppc_fcfid(c,D,B) ppc_fcfidx(c,D,B,0)
|
||||
#define ppc_fcfidd(c,D,B) ppc_fcfidx(c,D,B,1)
|
||||
|
||||
#define ppc_fctidx(c,D,B,Rc) ppc_emit32(c, (63 << 26) | ((D) << 21) | (0 << 16) | ((B) << 11) | (814 << 1) | (Rc))
|
||||
#define ppc_fctid(c,D,B) ppc_fctidx(c,D,B,0)
|
||||
#define ppc_fctidd(c,D,B) ppc_fctidx(c,D,B,1)
|
||||
|
||||
#define ppc_fctidzx(c,D,B,Rc) ppc_emit32(c, (63 << 26) | ((D) << 21) | (0 << 16) | ((B) << 11) | (815 << 1) | (Rc))
|
||||
#define ppc_fctidz(c,D,B) ppc_fctidzx(c,D,B,0)
|
||||
#define ppc_fctidzd(c,D,B) ppc_fctidzx(c,D,B,1)
|
||||
|
||||
#ifdef __mono_ppc64__
|
||||
|
||||
#define ppc_load_sequence(c,D,v) G_STMT_START { \
|
||||
ppc_lis ((c), (D), ((guint64)(v) >> 48) & 0xffff); \
|
||||
ppc_ori ((c), (D), (D), ((guint64)(v) >> 32) & 0xffff); \
|
||||
ppc_sldi ((c), (D), (D), 32); \
|
||||
ppc_oris ((c), (D), (D), ((guint64)(v) >> 16) & 0xffff); \
|
||||
ppc_ori ((c), (D), (D), (guint64)(v) & 0xffff); \
|
||||
} G_STMT_END
|
||||
|
||||
#define PPC_LOAD_SEQUENCE_LENGTH 20
|
||||
|
||||
#define ppc_is_imm32(val) (((((gint64)val)>> 31) == 0) || ((((gint64)val)>> 31) == -1))
|
||||
#define ppc_is_imm48(val) (((((gint64)val)>> 47) == 0) || ((((gint64)val)>> 47) == -1))
|
||||
|
||||
#define ppc_load48(c,D,v) G_STMT_START { \
|
||||
ppc_li ((c), (D), ((gint64)(v) >> 32) & 0xffff); \
|
||||
ppc_sldi ((c), (D), (D), 32); \
|
||||
ppc_oris ((c), (D), (D), ((guint64)(v) >> 16) & 0xffff); \
|
||||
ppc_ori ((c), (D), (D), (guint64)(v) & 0xffff); \
|
||||
} G_STMT_END
|
||||
|
||||
#define ppc_load(c,D,v) G_STMT_START { \
|
||||
if (ppc_is_imm16 ((guint64)(v))) { \
|
||||
ppc_li ((c), (D), (guint16)(guint64)(v)); \
|
||||
} else if (ppc_is_imm32 ((guint64)(v))) { \
|
||||
ppc_load32 ((c), (D), (guint32)(guint64)(v)); \
|
||||
} else if (ppc_is_imm48 ((guint64)(v))) { \
|
||||
ppc_load48 ((c), (D), (guint64)(v)); \
|
||||
} else { \
|
||||
ppc_load_sequence ((c), (D), (guint64)(v)); \
|
||||
} \
|
||||
} G_STMT_END
|
||||
|
||||
#define ppc_load_func(c,D,v) G_STMT_START { \
|
||||
ppc_load_sequence ((c), ppc_r11, (guint64)(gsize)(v)); \
|
||||
ppc_ldptr ((c), ppc_r2, sizeof (gpointer), ppc_r11); \
|
||||
ppc_ldptr ((c), (D), 0, ppc_r11); \
|
||||
} G_STMT_END
|
||||
|
||||
#define ppc_load_multiple_regs(c,D,d,A) G_STMT_START { \
|
||||
int __i, __o = (d); \
|
||||
for (__i = (D); __i <= 31; ++__i) { \
|
||||
ppc_ldr ((c), __i, __o, (A)); \
|
||||
__o += sizeof (guint64); \
|
||||
} \
|
||||
} G_STMT_END
|
||||
|
||||
#define ppc_store_multiple_regs(c,S,d,A) G_STMT_START { \
|
||||
int __i, __o = (d); \
|
||||
for (__i = (S); __i <= 31; ++__i) { \
|
||||
ppc_str ((c), __i, __o, (A)); \
|
||||
__o += sizeof (guint64); \
|
||||
} \
|
||||
} G_STMT_END
|
||||
|
||||
#define ppc_compare(c,cfrD,A,B) ppc_cmp((c), (cfrD), 1, (A), (B))
|
||||
#define ppc_compare_reg_imm(c,cfrD,A,B) ppc_cmpi((c), (cfrD), 1, (A), (B))
|
||||
#define ppc_compare_log(c,cfrD,A,B) ppc_cmpl((c), (cfrD), 1, (A), (B))
|
||||
|
||||
#define ppc_shift_left(c,A,S,B) ppc_sld((c), (A), (S), (B))
|
||||
#define ppc_shift_left_imm(c,A,S,n) ppc_sldi((c), (A), (S), (n))
|
||||
|
||||
#define ppc_shift_right_imm(c,A,S,B) ppc_srdi((c), (A), (S), (B))
|
||||
#define ppc_shift_right_arith_imm(c,A,S,B) ppc_sradi((c), (A), (S), (B))
|
||||
|
||||
#define ppc_multiply(c,D,A,B) ppc_mulld((c), (D), (A), (B))
|
||||
|
||||
#define ppc_clear_right_imm(c,A,S,n) ppc_clrrdi((c), (A), (S), (n))
|
||||
|
||||
#define ppc_divdx(c,D,A,B,OE,Rc) ppc_emit32(c, (31 << 26) | ((D) << 21) | ((A) << 16) | ((B) << 11) | ((OE) << 10) | (489 << 1) | (Rc))
|
||||
#define ppc_divd(c,D,A,B) ppc_divdx(c,D,A,B,0,0)
|
||||
#define ppc_divdd(c,D,A,B) ppc_divdx(c,D,A,B,0,1)
|
||||
#define ppc_divdo(c,D,A,B) ppc_divdx(c,D,A,B,1,0)
|
||||
#define ppc_divdod(c,D,A,B) ppc_divdx(c,D,A,B,1,1)
|
||||
|
||||
#define ppc_divdux(c,D,A,B,OE,Rc) ppc_emit32(c, (31 << 26) | ((D) << 21) | ((A) << 16) | ((B) << 11) | ((OE) << 10) | (457 << 1) | (Rc))
|
||||
#define ppc_divdu(c,D,A,B) ppc_divdux(c,D,A,B,0,0)
|
||||
#define ppc_divdud(c,D,A,B) ppc_divdux(c,D,A,B,0,1)
|
||||
#define ppc_divduo(c,D,A,B) ppc_divdux(c,D,A,B,1,0)
|
||||
#define ppc_divduod(c,D,A,B) ppc_divdux(c,D,A,B,1,1)
|
||||
|
||||
#define ppc_extswx(c,S,A,Rc) ppc_emit32(c, (31 << 26) | ((S) << 21) | ((A) << 16) | (0 << 11) | (986 << 1) | (Rc))
|
||||
#define ppc_extsw(c,A,S) ppc_extswx(c,S,A,0)
|
||||
#define ppc_extswd(c,A,S) ppc_extswx(c,S,A,1)
|
||||
|
||||
/* These move float to/from instuctions are only available on POWER6 in
|
||||
native mode. These instruction are faster then the equivalent
|
||||
store/load because they avoid the store queue and associated delays.
|
||||
These instructions should only be used in 64-bit mode unless the
|
||||
kernel preserves the 64-bit GPR on signals and dispatch in 32-bit
|
||||
mode. The Linux kernel does not. */
|
||||
#define ppc_mftgpr(c,T,B) ppc_emit32(c, (31 << 26) | ((T) << 21) | (0 << 16) | ((B) << 11) | (735 << 1) | 0)
|
||||
#define ppc_mffgpr(c,T,B) ppc_emit32(c, (31 << 26) | ((T) << 21) | (0 << 16) | ((B) << 11) | (607 << 1) | 0)
|
||||
|
||||
#define ppc_ld(c,D,ds,A) ppc_emit32(c, (58 << 26) | ((D) << 21) | ((A) << 16) | ((guint32)(ds) & 0xfffc) | 0)
|
||||
#define ppc_lwa(c,D,ds,A) ppc_emit32(c, (58 << 26) | ((D) << 21) | ((A) << 16) | ((ds) & 0xfffc) | 2)
|
||||
#define ppc_ldarx(c,D,A,B) ppc_emit32(c, (31 << 26) | ((D) << 21) | ((A) << 16) | ((B) << 11) | (84 << 1) | 0)
|
||||
#define ppc_ldu(c,D,ds,A) ppc_emit32(c, (58 << 26) | ((D) << 21) | ((A) << 16) | ((guint32)(ds) & 0xfffc) | 1)
|
||||
#define ppc_ldux(c,D,A,B) ppc_emit32(c, (31 << 26) | ((D) << 21) | ((A) << 16) | ((B) << 11) | (53 << 1) | 0)
|
||||
#define ppc_lwaux(c,D,A,B) ppc_emit32(c, (31 << 26) | ((D) << 21) | ((A) << 16) | ((B) << 11) | (373 << 1) | 0)
|
||||
#define ppc_ldx(c,D,A,B) ppc_emit32(c, (31 << 26) | ((D) << 21) | ((A) << 16) | ((B) << 11) | (21 << 1) | 0)
|
||||
#define ppc_lwax(c,D,A,B) ppc_emit32(c, (31 << 26) | ((D) << 21) | ((A) << 16) | ((B) << 11) | (341 << 1) | 0)
|
||||
|
||||
#define ppc_mulhdx(c,D,A,B,Rc) ppc_emit32(c, (31 << 26) | ((D) << 21) | ((A) << 16) | ((B) << 11) | (0 << 10) | (73 << 1) | (Rc))
|
||||
#define ppc_mulhd(c,D,A,B) ppc_mulhdx(c,D,A,B,0)
|
||||
#define ppc_mulhdd(c,D,A,B) ppc_mulhdx(c,D,A,B,1)
|
||||
#define ppc_mulhdux(c,D,A,B,Rc) ppc_emit32(c, (31 << 26) | ((D) << 21) | ((A) << 16) | ((B) << 11) | (0 << 10) | (9 << 1) | (Rc))
|
||||
#define ppc_mulhdu(c,D,A,B) ppc_mulhdux(c,D,A,B,0)
|
||||
#define ppc_mulhdud(c,D,A,B) ppc_mulhdux(c,D,A,B,1)
|
||||
|
||||
#define ppc_mulldx(c,D,A,B,OE,Rc) ppc_emit32(c, (31 << 26) | ((D) << 21) | ((A) << 16) | ((B) << 11) | ((OE) << 10) | (233 << 1) | (Rc))
|
||||
#define ppc_mulld(c,D,A,B) ppc_mulldx(c,D,A,B,0,0)
|
||||
#define ppc_mulldd(c,D,A,B) ppc_mulldx(c,D,A,B,0,1)
|
||||
#define ppc_mulldo(c,D,A,B) ppc_mulldx(c,D,A,B,1,0)
|
||||
#define ppc_mulldod(c,D,A,B) ppc_mulldx(c,D,A,B,1,1)
|
||||
|
||||
#define ppc_rldclx(c,A,S,B,MB,Rc) ppc_emit32(c, (30 << 26) | ((S) << 21) | ((A) << 16) | ((B) << 11) | (ppc_split_5_1(MB) << 5) | (8 << 1) | (Rc))
|
||||
#define ppc_rldcl(c,A,S,B,MB) ppc_rldclx(c,A,S,B,MB,0)
|
||||
#define ppc_rldcld(c,A,S,B,MB) ppc_rldclx(c,A,S,B,MB,1)
|
||||
#define ppc_rotld(c,A,S,B) ppc_rldcl(c, A, S, B, 0)
|
||||
|
||||
#define ppc_rldcrx(c,A,S,B,ME,Rc) ppc_emit32(c, (30 << 26) | ((S) << 21) | ((A) << 16) | ((B) << 11) | (ppc_split_5_1(ME) << 5) | (9 << 1) | (Rc))
|
||||
#define ppc_rldcr(c,A,S,B,ME) ppc_rldcrx(c,A,S,B,ME,0)
|
||||
#define ppc_rldcrd(c,A,S,B,ME) ppc_rldcrx(c,A,S,B,ME,1)
|
||||
|
||||
#define ppc_rldicx(c,S,A,SH,MB,Rc) ppc_emit32(c, (30 << 26) | ((S) << 21) | ((A) << 16) | (ppc_split_5_1_5(SH) << 11) | (ppc_split_5_1(MB) << 5) | (2 << 2) | (ppc_split_5_1_1(SH) << 1) | (Rc))
|
||||
#define ppc_rldic(c,A,S,SH,MB) ppc_rldicx(c,S,A,SH,MB,0)
|
||||
#define ppc_rldicd(c,A,S,SH,MB) ppc_rldicx(c,S,A,SH,MB,1)
|
||||
|
||||
#define ppc_rldiclx(c,S,A,SH,MB,Rc) ppc_emit32(c, (30 << 26) | ((S) << 21) | ((A) << 16) | (ppc_split_5_1_5(SH) << 11) | (ppc_split_5_1(MB) << 5) | (0 << 2) | (ppc_split_5_1_1(SH) << 1) | (Rc))
|
||||
#define ppc_rldicl(c,A,S,SH,MB) ppc_rldiclx(c,S,A,SH,MB,0)
|
||||
#define ppc_rldicld(c,A,S,SH,MB) ppc_rldiclx(c,S,A,SH,MB,1)
|
||||
#define ppc_extrdi(c,A,S,n,b) ppc_rldicl(c,A,S, (b) + (n), 64 - (n))
|
||||
#define ppc_rotldi(c,A,S,n) ppc_rldicl(c,A,S, n, 0)
|
||||
#define ppc_rotrdi(c,A,S,n) ppc_rldicl(c,A,S, 64 - (n), 0)
|
||||
#define ppc_srdi(c,A,S,n) ppc_rldicl(c,A,S, 64 - (n), n)
|
||||
#define ppc_clrldi(c,A,S,n) ppc_rldicl(c,A,S, 0, n)
|
||||
|
||||
#define ppc_rldicrx(c,A,S,SH,ME,Rc) ppc_emit32(c, (30 << 26) | ((S) << 21) | ((A) << 16) | (ppc_split_5_1_5(SH) << 11) | (ppc_split_5_1(ME) << 5) | (1 << 2) | (ppc_split_5_1_1(SH) << 1) | (Rc))
|
||||
#define ppc_rldicr(c,A,S,SH,ME) ppc_rldicrx(c,A,S,SH,ME,0)
|
||||
#define ppc_rldicrd(c,A,S,SH,ME) ppc_rldicrx(c,A,S,SH,ME,1)
|
||||
#define ppc_extldi(c,A,S,n,b) ppc_rldicr(c, A, S, b, (n) - 1)
|
||||
#define ppc_sldi(c,A,S,n) ppc_rldicr(c, A, S, n, 63 - (n))
|
||||
#define ppc_clrrdi(c,A,S,n) ppc_rldicr(c, A, S, 0, 63 - (n))
|
||||
|
||||
#define ppc_rldimix(c,S,A,SH,MB,Rc) ppc_emit32(c, (30 << 26) | ((S) << 21) | ((A) << 16) | (ppc_split_5_1_5(SH) << 11) | (ppc_split_5_1(MB) << 5) | (3 << 2) | (ppc_split_5_1_1(SH) << 1) | (Rc))
|
||||
#define ppc_rldimi(c,A,S,SH,MB) ppc_rldimix(c,S,A,SH,MB,0)
|
||||
#define ppc_rldimid(c,A,S,SH,MB) ppc_rldimix(c,S,A,SH,MB,1)
|
||||
|
||||
#define ppc_slbia(c) ppc_emit32(c, (31 << 26) | (0 << 21) | (0 << 16) | (0 << 11) | (498 << 1) | 0)
|
||||
#define ppc_slbie(c,B) ppc_emit32(c, (31 << 26) | (0 << 21) | (0 << 16) | ((B) << 11) | (434 << 1) | 0)
|
||||
#define ppc_sldx(c,S,A,B,Rc) ppc_emit32(c, (31 << 26) | ((S) << 21) | ((A) << 16) | ((B) << 11) | (27 << 1) | (Rc))
|
||||
#define ppc_sld(c,A,S,B) ppc_sldx(c,S,A,B,0)
|
||||
#define ppc_sldd(c,A,S,B) ppc_sldx(c,S,A,B,1)
|
||||
|
||||
#define ppc_sradx(c,S,A,B,Rc) ppc_emit32(c, (31 << 26) | ((S) << 21) | ((A) << 16) | ((B) << 11) | (794 << 1) | (Rc))
|
||||
#define ppc_srad(c,A,S,B) ppc_sradx(c,S,A,B,0)
|
||||
#define ppc_sradd(c,A,S,B) ppc_sradx(c,S,A,B,1)
|
||||
#define ppc_sradix(c,S,A,SH,Rc) ppc_emit32(c, (31 << 26) | ((S) << 21) | ((A) << 16) | (((SH) & 31) << 11) | (413 << 2) | (((SH) >> 5) << 1) | (Rc))
|
||||
#define ppc_sradi(c,A,S,SH) ppc_sradix(c,S,A,SH,0)
|
||||
#define ppc_sradid(c,A,S,SH) ppc_sradix(c,S,A,SH,1)
|
||||
|
||||
#define ppc_srdx(c,S,A,B,Rc) ppc_emit32(c, (31 << 26) | ((S) << 21) | ((A) << 16) | ((B) << 11) | (539 << 1) | (Rc))
|
||||
#define ppc_srd(c,A,S,B) ppc_srdx(c,S,A,B,0)
|
||||
#define ppc_srdd(c,A,S,B) ppc_srdx(c,S,A,B,1)
|
||||
|
||||
#define ppc_std(c,S,ds,A) ppc_emit32(c, (62 << 26) | ((S) << 21) | ((A) << 16) | ((guint32)(ds) & 0xfffc) | 0)
|
||||
#define ppc_stdcxd(c,S,A,B) ppc_emit32(c, (31 << 26) | ((S) << 21) | ((A) << 16) | ((B) << 11) | (214 << 1) | 1)
|
||||
#define ppc_stdu(c,S,ds,A) ppc_emit32(c, (62 << 26) | ((S) << 21) | ((A) << 16) | ((guint32)(ds) & 0xfffc) | 1)
|
||||
#define ppc_stdux(c,S,A,B) ppc_emit32(c, (31 << 26) | ((S) << 21) | ((A) << 16) | ((B) << 11) | (181 << 1) | 0)
|
||||
#define ppc_stdx(c,S,A,B) ppc_emit32(c, (31 << 26) | ((S) << 21) | ((A) << 16) | ((B) << 11) | (149 << 1) | 0)
|
||||
|
||||
#else
|
||||
/* Always true for 32-bit */
|
||||
#define ppc_is_imm32(val) (1)
|
||||
#endif
|
||||
|
||||
#endif
|
||||
6
FFTS/Sources/FFTS/src/arch/s390x/.gitignore
vendored
6
FFTS/Sources/FFTS/src/arch/s390x/.gitignore
vendored
@@ -1,6 +0,0 @@
|
||||
/Makefile
|
||||
/Makefile.in
|
||||
/.libs
|
||||
/.deps
|
||||
/*.la
|
||||
/*.lo
|
||||
@@ -1,35 +0,0 @@
|
||||
2010-03-23 Neale Ferguson <neale@sinenomine.net>
|
||||
|
||||
* s390x-codegen.h: Remove duplicate
|
||||
|
||||
2009-06-24 Neale Ferguson <neale@sinenomine.net>
|
||||
|
||||
* s390x-codegen.h: Add some new instructions.
|
||||
|
||||
2007-04-12 Neale Ferguson <neale@sinenomine.net>
|
||||
|
||||
* tramp.c: Add MONO_TYPE_PTR case.
|
||||
|
||||
2007-01-23 Neale Ferguson <neale@sinenomine.net>
|
||||
|
||||
* s390x-codegen.h: Add packed attribute to several instruction structures.
|
||||
|
||||
2006-03-13 Neale Ferguson <neale@sinenomine.net>
|
||||
|
||||
* s390x-codegen.h: Fix immediate checks.
|
||||
|
||||
2006-01-06 Neale Ferguson <neale@sinenomine.net>
|
||||
|
||||
* s390x-codegen.h: Add lpdbr instruction (OP_ABS).
|
||||
|
||||
2006-01-03 Neale Ferguson <neale@sinenomine.net>
|
||||
|
||||
* s390x-codegen.h: Add some new instructions.
|
||||
|
||||
2004-12-15 Neale Ferguson <Neale.Ferguson@SoftwareAG-usa.com>
|
||||
|
||||
* s390x-codegen.h: Add some new instructions (CS, CSG, CSY, CDS, CDSG, CDSY)
|
||||
|
||||
2004-08-03 Neale Ferguson <Neale.Ferguson@SoftwareAG-usa.com>
|
||||
|
||||
* s390x-codegen.h Makefile.am tramp.c: S/390 64-bit interpreter
|
||||
@@ -1,7 +0,0 @@
|
||||
|
||||
AM_CPPFLAGS = $(GLIB_CFLAGS) -I$(top_srcdir)
|
||||
|
||||
noinst_LTLIBRARIES = libmonoarch-s390x.la
|
||||
|
||||
libmonoarch_s390x_la_SOURCES = tramp.c s390x-codegen.h
|
||||
|
||||
@@ -1,997 +0,0 @@
|
||||
/*
|
||||
Copyright (C) 2001 Radek Doulik
|
||||
*/
|
||||
|
||||
#ifndef S390X_H
|
||||
#define S390X_H
|
||||
#include <glib.h>
|
||||
#include <assert.h>
|
||||
#include <limits.h>
|
||||
|
||||
#define FLOAT_REGS 2 /* No. float registers for parms */
|
||||
#define GENERAL_REGS 5 /* No. general registers for parms */
|
||||
|
||||
#define ARG_BASE s390_r10 /* Register for addressing arguments*/
|
||||
#define STKARG \
|
||||
(i*(sizeof(stackval))) /* Displacement of ith argument */
|
||||
|
||||
#define MINV_POS 160 /* MonoInvocation stack offset */
|
||||
#define STACK_POS (MINV_POS - sizeof (stackval) * sig->param_count)
|
||||
#define OBJ_POS 8
|
||||
#define TYPE_OFFSET (G_STRUCT_OFFSET (stackval, type))
|
||||
|
||||
#define MIN_CACHE_LINE 256
|
||||
|
||||
/*------------------------------------------------------------------*/
|
||||
/* Sequence to add an int/long long to parameters to stack_from_data*/
|
||||
/*------------------------------------------------------------------*/
|
||||
#define ADD_ISTACK_PARM(r, i) \
|
||||
if (reg_param < GENERAL_REGS-(r)) { \
|
||||
s390_lay (p, s390_r4, 0, STK_BASE, \
|
||||
local_start + (reg_param - this_flag) * sizeof(long)); \
|
||||
reg_param += (i); \
|
||||
} else { \
|
||||
s390_lay (p, s390_r4, 0, STK_BASE, \
|
||||
sz.stack_size + MINV_POS + stack_param * sizeof(long)); \
|
||||
stack_param += (i); \
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------------*/
|
||||
/* Sequence to add a float/double to parameters to stack_from_data */
|
||||
/*------------------------------------------------------------------*/
|
||||
#define ADD_RSTACK_PARM(i) \
|
||||
if (fpr_param < FLOAT_REGS) { \
|
||||
s390_lay (p, s390_r4, 0, STK_BASE, \
|
||||
float_pos + (fpr_param * sizeof(float) * (i))); \
|
||||
fpr_param++; \
|
||||
} else { \
|
||||
stack_param += (stack_param % (i)); \
|
||||
s390_lay (p, s390_r4, 0, STK_BASE, \
|
||||
sz.stack_size + MINV_POS + stack_param * sizeof(float) * (i)); \
|
||||
stack_param += (i); \
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------------*/
|
||||
/* Sequence to add a structure ptr to parameters to stack_from_data */
|
||||
/*------------------------------------------------------------------*/
|
||||
#define ADD_TSTACK_PARM \
|
||||
if (reg_param < GENERAL_REGS) { \
|
||||
s390_ly (p, s390_r4, 0, STK_BASE, \
|
||||
local_start + (reg_param - this_flag) * sizeof(long)); \
|
||||
reg_param++; \
|
||||
} else { \
|
||||
s390_ly (p, s390_r4, 0, STK_BASE, \
|
||||
sz.stack_size + MINV_POS + stack_param * sizeof(long)); \
|
||||
stack_param++; \
|
||||
}
|
||||
|
||||
#define ADD_PSTACK_PARM(r, i) \
|
||||
if (reg_param < GENERAL_REGS-(r)) { \
|
||||
s390_lay (p, s390_r4, 0, STK_BASE, \
|
||||
local_start + (reg_param - this_flag) * sizeof(long)); \
|
||||
reg_param += (i); \
|
||||
} else { \
|
||||
s390_ly (p, s390_r4, 0, STK_BASE, \
|
||||
sz.stack_size + MINV_POS + stack_param * sizeof(long)); \
|
||||
stack_param++; \
|
||||
}
|
||||
|
||||
typedef enum {
|
||||
s390_r0 = 0,
|
||||
s390_r1,
|
||||
s390_r2,
|
||||
s390_r3,
|
||||
s390_r4,
|
||||
s390_r5,
|
||||
s390_r6,
|
||||
s390_r7,
|
||||
s390_r8,
|
||||
s390_r9,
|
||||
s390_r10,
|
||||
s390_r11,
|
||||
s390_r12,
|
||||
s390_r13,
|
||||
s390_r14,
|
||||
s390_r15,
|
||||
} S390IntRegister;
|
||||
|
||||
typedef enum {
|
||||
s390_f0 = 0,
|
||||
s390_f1,
|
||||
s390_f2,
|
||||
s390_f3,
|
||||
s390_f4,
|
||||
s390_f5,
|
||||
s390_f6,
|
||||
s390_f7,
|
||||
s390_f8,
|
||||
s390_f9,
|
||||
s390_f10,
|
||||
s390_f11,
|
||||
s390_f12,
|
||||
s390_f13,
|
||||
s390_f14,
|
||||
s390_f15,
|
||||
} S390FloatRegister;
|
||||
|
||||
typedef enum {
|
||||
s390_a0 = 0,
|
||||
s390_a1,
|
||||
s390_a2,
|
||||
s390_a3,
|
||||
s390_a4,
|
||||
s390_a5,
|
||||
s390_a6,
|
||||
s390_a7,
|
||||
s390_a8,
|
||||
s390_a9,
|
||||
s390_a10,
|
||||
s390_a11,
|
||||
s390_a12,
|
||||
s390_a13,
|
||||
s390_a14,
|
||||
s390_a15,
|
||||
} S390AccRegister;
|
||||
|
||||
typedef enum {
|
||||
s390_fpc = 256,
|
||||
} S390SpecialRegister;
|
||||
|
||||
#define s390_is_imm16(val) ((glong)val >= (glong) SHRT_MIN && \
|
||||
(glong)val <= (glong) SHRT_MAX)
|
||||
#define s390_is_imm32(val) ((glong)val >= (glong) INT_MIN && \
|
||||
(glong)val <= (glong) INT_MAX)
|
||||
#define s390_is_uimm16(val) ((glong)val >= 0 && (glong)val <= (glong) USHRT_MAX)
|
||||
#define s390_is_uimm32(val) ((glong)val >= 0 && (glong)val <= (glong) UINT_MAX)
|
||||
#define s390_is_uimm20(val) ((glong)val >= 0 && (glong)val <= 1048575)
|
||||
#define s390_is_imm20(val) ((glong)val >= -524288 && (glong)val <= 524287)
|
||||
#define s390_is_imm12(val) ((glong)val >= (glong)-4096 && \
|
||||
(glong)val <= (glong)4095)
|
||||
#define s390_is_uimm12(val) ((glong)val >= 0 && (glong)val <= 4095)
|
||||
|
||||
#define STK_BASE s390_r15
|
||||
#define S390_SP s390_r15
|
||||
#define S390_FP s390_r11
|
||||
#define S390_MINIMAL_STACK_SIZE 160
|
||||
#define S390_REG_SAVE_OFFSET 48
|
||||
#define S390_PARM_SAVE_OFFSET 16
|
||||
#define S390_RET_ADDR_OFFSET 112
|
||||
#define S390_FLOAT_SAVE_OFFSET 128
|
||||
|
||||
#define S390_CC_ZR 8
|
||||
#define S390_CC_NE 7
|
||||
#define S390_CC_NZ 7
|
||||
#define S390_CC_LT 4
|
||||
#define S390_CC_GT 2
|
||||
#define S390_CC_GE 11
|
||||
#define S390_CC_NM 11
|
||||
#define S390_CC_LE 13
|
||||
#define S390_CC_OV 1
|
||||
#define S390_CC_NO 14
|
||||
#define S390_CC_CY 3
|
||||
#define S390_CC_NC 12
|
||||
#define S390_CC_UN 15
|
||||
|
||||
#define s390_word(addr, value) do \
|
||||
{ \
|
||||
* (guint32 *) addr = (guint32) value; \
|
||||
addr += sizeof(guint32); \
|
||||
} while (0)
|
||||
|
||||
#define s390_float(addr, value) do \
|
||||
{ \
|
||||
* (gfloat *) addr = (gfloat) value; \
|
||||
addr += sizeof(gfloat); \
|
||||
} while (0)
|
||||
|
||||
#define s390_llong(addr, value) do \
|
||||
{ \
|
||||
* (guint64 *) addr = (guint64) value; \
|
||||
addr += sizeof(guint64); \
|
||||
} while (0)
|
||||
|
||||
#define s390_double(addr, value) do \
|
||||
{ \
|
||||
* (gdouble *) addr = (gdouble) value; \
|
||||
addr += sizeof(gdouble); \
|
||||
} while (0)
|
||||
|
||||
typedef struct {
|
||||
short op;
|
||||
} E_Format;
|
||||
|
||||
typedef struct {
|
||||
char op;
|
||||
int im;
|
||||
} I_Format;
|
||||
|
||||
typedef struct {
|
||||
char op;
|
||||
char r1 : 4;
|
||||
char r2 : 4;
|
||||
} RR_Format;
|
||||
|
||||
typedef struct {
|
||||
short op;
|
||||
char xx;
|
||||
char r1 : 4;
|
||||
char r2 : 4;
|
||||
} RRE_Format;
|
||||
|
||||
typedef struct {
|
||||
short op;
|
||||
char r1 : 4;
|
||||
char xx : 4;
|
||||
char r3 : 4;
|
||||
char r2 : 4;
|
||||
} RRF_Format_1;
|
||||
|
||||
typedef struct {
|
||||
short op;
|
||||
char m3 : 4;
|
||||
char xx : 4;
|
||||
char r1 : 4;
|
||||
char r2 : 4;
|
||||
} RRF_Format_2;
|
||||
|
||||
typedef struct {
|
||||
short op;
|
||||
char r3 : 4;
|
||||
char m4 : 4;
|
||||
char r1 : 4;
|
||||
char r2 : 4;
|
||||
} RRF_Format_3;
|
||||
|
||||
typedef struct {
|
||||
char op;
|
||||
char r1 : 4;
|
||||
char x2 : 4;
|
||||
char b2 : 4;
|
||||
short d2 : 12;
|
||||
} RX_Format;
|
||||
|
||||
typedef struct {
|
||||
char op1;
|
||||
char r1 : 4;
|
||||
char x2 : 4;
|
||||
char b2 : 4;
|
||||
int d2 : 12;
|
||||
char xx;
|
||||
char op2;
|
||||
} RXE_Format;
|
||||
|
||||
typedef struct {
|
||||
char op1;
|
||||
char r3 : 4;
|
||||
char x2 : 4;
|
||||
char b2 : 4;
|
||||
int d2 : 12;
|
||||
char r1 : 4;
|
||||
char xx : 4;
|
||||
char op2;
|
||||
} RXF_Format;
|
||||
|
||||
typedef struct {
|
||||
char op1;
|
||||
char r1 : 4;
|
||||
char x2 : 4;
|
||||
char b2 : 4;
|
||||
int d2 : 20;
|
||||
char op2;
|
||||
} __attribute__ ((packed)) RXY_Format;
|
||||
|
||||
typedef struct {
|
||||
char op;
|
||||
char r1 : 4;
|
||||
char r3 : 4;
|
||||
char b2 : 4;
|
||||
int d2 : 12;
|
||||
} RS_Format_1;
|
||||
|
||||
typedef struct {
|
||||
char op;
|
||||
char r1 : 4;
|
||||
char m3 : 4;
|
||||
char b2 : 4;
|
||||
int d2 : 12;
|
||||
} RS_Format_2;
|
||||
|
||||
typedef struct {
|
||||
char op;
|
||||
char r1 : 4;
|
||||
char xx : 4;
|
||||
char b2 : 4;
|
||||
int d2 : 12;
|
||||
} RS_Format_3;
|
||||
|
||||
typedef struct {
|
||||
char op1;
|
||||
char r1 : 4;
|
||||
char r3 : 4;
|
||||
char b2 : 4;
|
||||
int d2 : 20;
|
||||
char op2;
|
||||
} __attribute__ ((packed)) RSY_Format_1;
|
||||
|
||||
typedef struct {
|
||||
char op1;
|
||||
char r1 : 4;
|
||||
char m3 : 4;
|
||||
char b2 : 4;
|
||||
int d2 : 20;
|
||||
char op2;
|
||||
} __attribute__ ((packed)) RSY_Format_2;
|
||||
|
||||
typedef struct {
|
||||
char op1;
|
||||
char l1 : 4;
|
||||
char xx : 4;
|
||||
char b1 : 4;
|
||||
int d1 : 12;
|
||||
char yy;
|
||||
char op2;
|
||||
} RSL_Format;
|
||||
|
||||
typedef struct {
|
||||
char op;
|
||||
char r1 : 4;
|
||||
char r3 : 4;
|
||||
short i2;
|
||||
} RSI_Format;
|
||||
|
||||
typedef struct {
|
||||
char op1;
|
||||
char m1 : 4;
|
||||
char op2 : 4;
|
||||
short i2;
|
||||
} RI_Format;
|
||||
|
||||
typedef struct {
|
||||
char op1;
|
||||
char r1 : 4;
|
||||
char r3 : 4;
|
||||
short i2;
|
||||
char xx;
|
||||
char op2;
|
||||
} RIE_Format_1;
|
||||
|
||||
typedef struct {
|
||||
char op1;
|
||||
char r1 : 4;
|
||||
char r3 : 4;
|
||||
short i2;
|
||||
char m2 : 4;
|
||||
char xx : 4;
|
||||
char op2;
|
||||
} RIE_Format_2;
|
||||
|
||||
typedef struct {
|
||||
char op1;
|
||||
char r1 : 4;
|
||||
char r3 : 4;
|
||||
short d;
|
||||
char i;
|
||||
char op2;
|
||||
} RIE_Format_3;
|
||||
|
||||
typedef struct {
|
||||
char op1;
|
||||
char r1 : 4;
|
||||
char yy : 4;
|
||||
short i2;
|
||||
char m3 : 4;
|
||||
char xx : 4;
|
||||
char op2;
|
||||
} RIE_Format_4;
|
||||
|
||||
typedef struct {
|
||||
char op1;
|
||||
char r1 : 4;
|
||||
char op2 : 4;
|
||||
int i2;
|
||||
} __attribute__ ((packed)) RIL_Format_1;
|
||||
|
||||
typedef struct {
|
||||
char op1;
|
||||
char m1 : 4;
|
||||
char op2 : 4;
|
||||
int i2;
|
||||
} __attribute__ ((packed)) RIL_Format_2;
|
||||
|
||||
typedef struct {
|
||||
char op;
|
||||
char i2;
|
||||
char b1 : 4;
|
||||
short d1 : 12;
|
||||
} SI_Format;
|
||||
|
||||
typedef struct {
|
||||
char op1;
|
||||
char i2;
|
||||
char b1 : 4;
|
||||
int d1 : 20;
|
||||
char op2;
|
||||
} __attribute__ ((packed)) SIY_Format;
|
||||
|
||||
typedef struct {
|
||||
short op;
|
||||
char b2 : 4;
|
||||
short d2 : 12;
|
||||
} S_Format;
|
||||
|
||||
typedef struct {
|
||||
char op;
|
||||
char ll;
|
||||
char b1 : 4;
|
||||
short d1 : 12;
|
||||
char b2 : 4;
|
||||
short d2 : 12;
|
||||
} SS_Format_1;
|
||||
|
||||
typedef struct {
|
||||
char op;
|
||||
char l1 : 4;
|
||||
char l2 : 4;
|
||||
char b1 : 4;
|
||||
short d1 : 12;
|
||||
char b2 : 4;
|
||||
short d2 : 12;
|
||||
} SS_Format_2;
|
||||
|
||||
typedef struct {
|
||||
char op;
|
||||
char r1 : 4;
|
||||
char r3 : 4;
|
||||
char b1 : 4;
|
||||
short d1 : 12;
|
||||
char b2 : 4;
|
||||
short d2 : 12;
|
||||
} SS_Format_3;
|
||||
|
||||
typedef struct {
|
||||
char op;
|
||||
char r1 : 4;
|
||||
char r3 : 4;
|
||||
char b2 : 4;
|
||||
short d2 : 12;
|
||||
char b4 : 4;
|
||||
short d4 : 12;
|
||||
} SS_Format_4;
|
||||
|
||||
typedef struct {
|
||||
short op;
|
||||
short tb1 : 4;
|
||||
short d1 : 12;
|
||||
short b2 : 4;
|
||||
short d2 : 12;
|
||||
} __attribute__ ((packed)) SSE_Format;
|
||||
|
||||
typedef struct {
|
||||
short op;
|
||||
char r3 : 4;
|
||||
char o2 : 4;
|
||||
short b1 : 4;
|
||||
short d1 : 12;
|
||||
short b2 : 4;
|
||||
short d2 : 12;
|
||||
} __attribute__ ((packed)) SSF_Format;
|
||||
|
||||
#define s390_emit16(c, x) do \
|
||||
{ \
|
||||
*((guint16 *) c) = (guint16) x; \
|
||||
c += sizeof(guint16); \
|
||||
} while(0)
|
||||
|
||||
#define s390_emit32(c, x) do \
|
||||
{ \
|
||||
*((guint32 *) c) = (guint32) x; \
|
||||
c += sizeof(guint32); \
|
||||
} while(0)
|
||||
|
||||
#define S390_E(c,opc) s390_emit16(c,opc)
|
||||
|
||||
#define S390_I(c,opc,imm) s390_emit16(c, (opc << 8 | imm))
|
||||
|
||||
#define S390_RR(c,opc,g1,g2) s390_emit16(c, (opc << 8 | (g1) << 4 | g2))
|
||||
|
||||
#define S390_RRE(c,opc,g1,g2) s390_emit32(c, (opc << 16 | (g1) << 4 | g2))
|
||||
|
||||
#define S390_RRF_1(c,opc,g1,g2,g3) s390_emit32(c, (opc << 16 | (g1) << 12 | (g3) << 4 | g2))
|
||||
|
||||
#define S390_RRF_2(c,opc,g1,k3,g2) s390_emit32(c, (opc << 16 | (k3) << 12 | (g1) << 4 | g2))
|
||||
|
||||
#define S390_RRF_3(c,opc,g1,g2,k4,g3) s390_emit32(c, (opc << 16 | (g3) << 12 | (k4) << 8 | (g1) << 4 | g2))
|
||||
|
||||
#define S390_RX(c,opc,g1,n2,s2,p2) s390_emit32(c, (opc << 24 | (g1) << 20 | (n2) << 16 | (s2) << 12 | ((p2) & 0xfff)))
|
||||
|
||||
#define S390_RXE(c,opc,g1,n2,s2,p2) do \
|
||||
{ \
|
||||
s390_emit16(c, ((opc & 0xff00) | (g1) << 4 | n2)); \
|
||||
s390_emit32(c, ((s2) << 28 | (((p2) & 0xfff) << 16) | \
|
||||
(opc & 0xff))); \
|
||||
} while (0)
|
||||
|
||||
#define S390_RXY(c,opc,g1,n2,s2,p2) do \
|
||||
{ \
|
||||
s390_emit16(c, ((opc & 0xff00) | (g1) << 4 | n2)); \
|
||||
s390_emit32(c, ((s2) << 28 | (((p2) & 0xfff) << 16) | \
|
||||
((((p2) & 0xff000) >> 12) << 8) | \
|
||||
(opc & 0xff))); \
|
||||
} while (0)
|
||||
|
||||
#define S390_RS_1(c,opc,g1,g3,s2,p2) s390_emit32(c, (opc << 24 | (g1) << 20 | (g3) << 16 | (s2) << 12 | ((p2) & 0xfff)))
|
||||
|
||||
#define S390_RS_2(c,opc,g1,k3,s2,p2) s390_emit32(c, (opc << 24 | (g1) << 20 | (k3) << 16 | (s2) << 12 | ((p2) & 0xfff)))
|
||||
|
||||
#define S390_RS_3(c,opc,g1,s2,p2) s390_emit32(c, (opc << 24 | (g1) << 20 | (s2) << 12 | ((p2) & 0xfff)))
|
||||
|
||||
#define S390_RSY_1(c,opc,g1,g3,s2,p2) do \
|
||||
{ \
|
||||
s390_emit16(c, ((opc & 0xff00) | (g1) << 4 | g3)); \
|
||||
s390_emit32(c, ((s2) << 28 | (((p2) & 0xfff) << 16) | \
|
||||
((((p2) & 0xff000) >> 12) << 8) | \
|
||||
(opc & 0xff))); \
|
||||
} while (0)
|
||||
|
||||
#define S390_RSY_2(c,opc,g1,k3,s2,p2) do \
|
||||
{ \
|
||||
s390_emit16(c, ((opc & 0xff00) | (g1) << 4 | k3)); \
|
||||
s390_emit32(c, ((s2) << 28 | (((p2) & 0xfff) << 16) | \
|
||||
((((p2) & 0xff000) >> 12) << 8) | \
|
||||
(opc & 0xff))); \
|
||||
} while (0)
|
||||
|
||||
#define S390_RSL(c,opc,ln,s1,p1) do \
|
||||
{ \
|
||||
s390_emit16(c, ((opc & 0xff00) | (ln) << 4)); \
|
||||
s390_emit32(c, ((s1) << 28 | ((s1 & 0xfff) << 16) | \
|
||||
(opc & 0xff))); \
|
||||
} while (0)
|
||||
|
||||
#define S390_RSI(c,opc,g1,g3,m2) s390_emit32(c, (opc << 24 | (g1) << 20 | (g3) << 16 | (m2 & 0xffff)))
|
||||
|
||||
#define S390_RI(c,opc,g1,m2) s390_emit32(c, ((opc >> 4) << 24 | (g1) << 20 | (opc & 0x0f) << 16 | (m2 & 0xffff)))
|
||||
|
||||
#define S390_RIE_1(c,opc,g1,g3,m2) do \
|
||||
{ \
|
||||
s390_emit16(c, ((opc & 0xff00) | (g1) << 4 | g3)); \
|
||||
s390_emit32(c, ((m2) << 16 | (opc & 0xff))); \
|
||||
} while (0)
|
||||
|
||||
#define S390_RIE_2(c,opc,g1,g2,m3,v) do \
|
||||
{ \
|
||||
s390_emit16(c, ((opc & 0xff00) | (g1) << 4 | g3)); \
|
||||
s390_emit16(c, (v)); \
|
||||
s390_emit16(c, ((m2) << 12 | (opc & 0xff))); \
|
||||
} while (0)
|
||||
|
||||
#define S390_RIE_3(c,opc,g1,i,m3,d) do \
|
||||
{ \
|
||||
s390_emit16(c, ((opc & 0xff00) | (g1) << 4 | m3)); \
|
||||
s390_emit16(c, (d)); \
|
||||
s390_emit16(c, ((i) << 8 | (opc & 0xff))); \
|
||||
} while (0)
|
||||
|
||||
#define S390_RIE_4(c,opc,g1,i2,m3) do \
|
||||
{ \
|
||||
s390_emit16(c, ((opc & 0xff00) | (g1) << 4); \
|
||||
s390_emit16(c, (i2)); \
|
||||
s390_emit16(c, ((m3) << 12 | (opc & 0xff))); \
|
||||
} while (0)
|
||||
|
||||
#define S390_RIL_1(c,opc,g1,m2) do \
|
||||
{ \
|
||||
s390_emit16(c, ((opc >> 4) << 8 | (g1) << 4 | (opc & 0xf))); \
|
||||
s390_emit32(c, m2); \
|
||||
} while (0)
|
||||
|
||||
#define S390_RIL_2(c,opc,k1,m2) do \
|
||||
{ \
|
||||
s390_emit16(c, ((opc >> 4) << 8 | (k1) << 4 | (opc & 0xf))); \
|
||||
s390_emit32(c, m2); \
|
||||
} while (0)
|
||||
|
||||
#define S390_RIS(c,opc,r,i,m3,b,d) do \
|
||||
{ \
|
||||
s390_emit16(c, ((opc, & 0xff00) | (r1) << 4) | (r2)); \
|
||||
s390_emit16(c, ((b) << 12) | (d)); \
|
||||
s390_emit16(c, ((i) << 4) | ((opc) & 0xff)); \
|
||||
}
|
||||
|
||||
#define S390_RRS(c,opc,r1,r2,m3,b,d) do \
|
||||
{ \
|
||||
s390_emit16(c, ((opc, & 0xff00) | (r1) << 4) | (r2)); \
|
||||
s390_emit16(c, ((b) << 12) | (d)); \
|
||||
s390_emit16(c, ((m3) << 12) | ((opc) & 0xff)); \
|
||||
}
|
||||
|
||||
#define S390_SI(c,opc,s1,p1,m2) s390_emit32(c, (opc << 24 | (m2) << 16 | (s1) << 12 | ((p1) & 0xfff)));
|
||||
|
||||
#define S390_SIY(c,opc,s1,p1,m2) do \
|
||||
{ \
|
||||
s390_emit16(c, ((opc & 0xff00) | m2)); \
|
||||
s390_emit32(c, ((s1) << 24 | (((p2) & 0xfffff) << 8) | \
|
||||
(opc & 0xff))); \
|
||||
} while (0)
|
||||
|
||||
#define S390_S(c,opc,s2,p2) s390_emit32(c, (opc << 16 | (s2) << 12 | ((p2) & 0xfff)))
|
||||
|
||||
#define S390_SS_1(c,opc,ln,s1,p1,s2,p2) do \
|
||||
{ \
|
||||
s390_emit32(c, (opc << 24 | ((ln-1) & 0xff) << 16 | \
|
||||
(s1) << 12 | ((p1) & 0xfff))); \
|
||||
s390_emit16(c, ((s2) << 12 | ((p2) & 0xfff))); \
|
||||
} while (0)
|
||||
|
||||
#define S390_SS_2(c,opc,n1,n2,s1,p1,s2,p2) do \
|
||||
{ \
|
||||
s390_emit32(c, (opc << 24 | (n1) << 16 | (n2) << 12 | \
|
||||
(s1) << 12 | ((p1) & 0xfff))); \
|
||||
s390_emit16(c, ((s2) << 12 | ((p2) & 0xfff))); \
|
||||
} while (0)
|
||||
|
||||
#define S390_SS_3(c,opc,g1,g3,s1,p1,s2,p2) do \
|
||||
{ \
|
||||
s390_emit32(c, (opc << 24 | (g1) << 16 | (g3) << 12 | \
|
||||
(s1) << 12 | ((p1) & 0xfff))); \
|
||||
s390_emit16(c, ((s2) << 12 | ((p2) & 0xfff))); \
|
||||
} while (0)
|
||||
|
||||
#define S390_SS_4(c,opc,g1,g3,s2,p2,s4,p4) do \
|
||||
{ \
|
||||
s390_emit32(c, (opc << 24 | (g1) << 16 | (g3) << 12 | \
|
||||
(s2) << 12 | ((p2) & 0xfff))); \
|
||||
s390_emit16(c, ((s4) << 12 | ((p4) & 0xfff))); \
|
||||
} while (0)
|
||||
|
||||
#define S390_SSE(c,opc,s1,p1,s2,p2) do \
|
||||
{ \
|
||||
s390_emit16(c, opc); \
|
||||
s390_emit16(c, ((s1) << 12 | ((p1) & 0xfff))); \
|
||||
s390_emit16(c, ((s2) << 12 | ((p2) & 0xfff))); \
|
||||
} while (0)
|
||||
|
||||
#define S390_SSF(c,opc,r3,s1,p1,s2,p2) do \
|
||||
{ \
|
||||
s390_emit16(c, (((opc) & 0xff00) << 8) | ((r3) << 4) | \
|
||||
((opc) & 0xf)); \
|
||||
s390_emit16(c, ((s1) << 12 | ((p1) & 0xfff))); \
|
||||
s390_emit16(c, ((s2) << 12 | ((p2) & 0xfff))); \
|
||||
} while (0)
|
||||
|
||||
#define s390_a(c, r, x, b, d) S390_RX(c, 0x5a, r, x, b, d)
|
||||
#define s390_adb(c, r, x, b, d) S390_RXE(c, 0xed1a, r, x, b, d)
|
||||
#define s390_adbr(c, r1, r2) S390_RRE(c, 0xb31a, r1, r2)
|
||||
#define s390_aebr(c, r1, r2) S390_RRE(c, 0xb30a, r1, r2)
|
||||
#define s390_afi(c, r, v) S390_RIL_1(c, 0xc29, r, v);
|
||||
#define s390_ag(c, r, x, b, d) S390_RXY(c, 0xe308, r, x, b, d)
|
||||
#define s390_agf(c, r, x, b, d) S390_RXY(c, 0xe318, r, x, b, d)
|
||||
#define s390_agfi(c, r, v) S390_RIL_1(c, 0xc28, r, v)
|
||||
#define s390_afgr(c, r1, r2) S390_RRE(c, 0xb918, r1, r2)
|
||||
#define s390_aghi(c, r, v) S390_RI(c, 0xa7b, r, v)
|
||||
#define s390_aghik(c, r, v) S390_RIE_1(c, 0xecd9, r, v)
|
||||
#define s390_agr(c, r1, r2) S390_RRE(c, 0xb908, r1, r2)
|
||||
#define s390_agrk(c, r1, r2, r3) S390_RRF_1(c, 0xb9e8, r1, r2, r3)
|
||||
#define s390_agsi(c, r, v) S390_SIY(c, 0xeb7a, r v)
|
||||
#define s390_ahhhr(c, r1, r2, r3) S390_RRF_1(c, 0xb9c8, r1, r2, r3)
|
||||
#define s390_ahhlr(c, r1, r2, r3) S390_RRF_1(c, 0xb9d8, r1, r2, r3)
|
||||
#define s390_ahi(c, r, v) S390_RI(c, 0xa7a, r, v)
|
||||
#define s390_ahik(c, r, v) S390_RIE_1(c, 0xecd8, r, v)
|
||||
#define s390_ahy(c, r, x, b, d) S390_RXY(c, 0xe37a, r, b, d)
|
||||
#define s390_aih(c, r, v) S390_RIL_1(c, 0xcc8, r, v)
|
||||
#define s390_al(c, r, x, b, d) S390_RX(c, 0x5e, r, x, b, d)
|
||||
#define s390_alc(c, r, x, b, d) S390_RXY(c, 0xe398, r, x, b, d)
|
||||
#define s390_alcg(c, r, x, b, d) S390_RXY(c, 0xe388, r, x, b, d)
|
||||
#define s390_alcgr(c, r1, r2) S390_RRE(c, 0xb988, r1, r2)
|
||||
#define s390_alcr(c, r1, r2) S390_RRE(c, 0xb998, r1, r2)
|
||||
#define s390_alfi(c, r, v) S390_RIL_1(c, 0xc2b, r, v)
|
||||
#define s390_alg(c, r, x, b, d) S390_RXY(c, 0xe30a, r, x, b, d)
|
||||
#define s390_algf(c, r, x, b, d) S390_RXY(c, 0xe31a, r, x, b, d)
|
||||
#define s390_algfi(c, r, v) S390_RIL_1(c, 0xc2a, r, v)
|
||||
#define s390_algfr(c, r1, r2) S390_RRE(c, 0xb91a, r1, r2)
|
||||
#define s390_alghsik(c, r, v) S390_RIE_1(c, 0xecd8, r, v)
|
||||
#define s390_algr(c, r1, r2) S390_RRE(c, 0xb90a, r1, r2)
|
||||
#define s390_algsi(c, r, v) S390_SIY(c, 0xeb7e, r, v)
|
||||
#define s390_alhhhr(c, r1, r2, r3) S390_RRF_1(c, 0xb9ca, r1, r2, r3)
|
||||
#define s390_alhhlr(c, r1, r2, r3) S390_RRF_1(c, 0xb9da, r1, r2, r3)
|
||||
#define s390_alhsik(c, r, v) S390_RIE_1(c, 0xecda, r, v)
|
||||
#define s390_alr(c, r1, r2) S390_RR(c, 0x1e, r1, r2)
|
||||
#define s390_alrk(c, r1, r2) S390_RRF(c, 0xb9fa, r1, r2)
|
||||
#define s390_alsi(c, r, v) S390_SIY(c, 0xeb6e, r, v)
|
||||
#define s390_alsih(c, r, v) S390_RIL_1(c, 0xcca, r, v)
|
||||
#define s390_alsihn(c, r, v) S390_RIL_1(c, 0xccb, r, v)
|
||||
#define s390_aly(c, r, x, b, d) S390_RXY(c, 0xe35e, r, x, b, d)
|
||||
#define s390_ar(c, r1, r2) S390_RR(c, 0x1a, r1, r2)
|
||||
#define s390_ark(c, r1, r2, r3) S390_RRF_1(c, 0xb9f8, r1, r2, r3)
|
||||
#define s390_asi(c, r, v) S390_SIY(c, 0xeb6a, r, v)
|
||||
#define s390_ay(c, r, x, b, d) S390_RXY(c, 0xe35a, r, x, b, d)
|
||||
#define s390_basr(c, r1, r2) S390_RR(c, 0x0d, r1, r2)
|
||||
#define s390_bctr(c, r1, r2) S390_RR(c, 0x06, r1, r2)
|
||||
#define s390_bctrg(c, r1, r2) S390_RRE(c, 0xb946, r1, r2)
|
||||
#define s390_bnzr(c, r) S390_RR(c, 0x07, 0x07, r)
|
||||
#define s390_bras(c, r, o) S390_RI(c, 0xa75, r, o)
|
||||
#define s390_brasl(c, r, o) S390_RIL_1(c, 0xc05, r, o)
|
||||
#define s390_brc(c, m, d) S390_RI(c, 0xa74, m, d)
|
||||
#define s390_brcl(c, m, d) S390_RIL_2(c, 0xc04, m, d)
|
||||
#define s390_br(c, r) S390_RR(c, 0x07, 0xf, r)
|
||||
#define s390_break(c) S390_RR(c, 0, 0, 0)
|
||||
#define s390_bzr(c, r) S390_RR(c, 0x07, 0x08, r)
|
||||
#define s390_c(c, r, x, b, d) S390_RX(c, 0x59, r, x, b, d)
|
||||
#define s390_cdb(c, r, x, b, d) S390_RXE(c, 0xed19, r, x, b, d)
|
||||
#define s390_cdbr(c, r1, r2) S390_RRE(c, 0xb319, r1, r2)
|
||||
#define s390_cdfbr(c, r1, r2) S390_RRE(c, 0xb395, r1, r2)
|
||||
#define s390_cdgbr(c, r1, r2) S390_RRE(c, 0xb3a5, r1, r2)
|
||||
#define s390_cds(c, r1, r2, b, d) S390_RX(c, 0xbb, r1, r2, b, d)
|
||||
#define s390_cdsg(c, r1, r2, b, d) S390_RSY_1(c, 0xeb3e, r1, r2, b, d)
|
||||
#define s390_cdsy(c, r1, r2, b, d) S390_RSY_1(c, 0xeb31, r1, r2, b, d)
|
||||
#define s390_cebr(c, r1, r2) S390_RRE(c, 0xb309, r1, r2)
|
||||
#define s390_cegbr(c, r1, r2) S390_RRE(c, 0xb3a4, r1, r2)
|
||||
#define s390_cfdbr(c, r1, m, r2) S390_RRF_2(c, 0xb399, r1, m, r2)
|
||||
#define s390_cfi(c, r, v) S390_RIL_1(c, 0xc2d, r, v)
|
||||
#define s390_cgdbr(c, r1, m, r2) S390_RRF_2(c, 0xb3a9, r1, m, r2)
|
||||
#define s390_cg(c, r, x, b, d) S390_RXY(c, 0xe320, r, x, b, d)
|
||||
#define s390_cgfi(c, r, v) S390_RIL_1(c, 0xc2c, r, v)
|
||||
#define s390_cgfrl(c, r, v) S390_RIL_1(c, 0xc6c, r, v)
|
||||
#define s390_cghi(c, r, i) S390_RI(c, 0xa7f, r, i)
|
||||
#define s390_cgib(c, r, i, m, b, d) S390_RIS(c, 0xecfc, r, i, m, b, d)
|
||||
#define s390_cgij(c, r, i, m, d) S390_RIE_3(c, 0xec7c, r, i, m, d)
|
||||
#define s390_cgit(c, r, i, m) S390_RIE_4(c, 0xec70, r, i m);
|
||||
#define s390_cgr(c, r1, r2) S390_RRE(c, 0xb920, r1, r2)
|
||||
#define s390_cgrb(c, r1, r2, m3, b, d) S390_RRS(c, 0xece4, r1, r2, m3, b, d)
|
||||
#define s390_cgrj(c, r1, r2, m3, v) S390_RIE_2(c, 0xec64, r1, r2, m3, v)
|
||||
#define s390_cgrl(c, r, v) S390_RIL_1(c, 0xc68, r, v)
|
||||
#define s390_chi(c, r, i) S390_RI(c, 0xa7e, r, i)
|
||||
#define s390_cib(c, r, i, m, b, d) S390_RIS(c, 0xecfe, r, i, m, b, d)
|
||||
#define s390_cij(c, r, i, m, d) S390_RIE_3(c, 0xec7e, r, i, m, d)
|
||||
#define s390_cit(c, r, i, m) S390_RIE_4(c, 0xec72, r, i m);
|
||||
#define s390_cl(c, r, x, b, d) S390_RX(c, 0x55, r, x, b, d)
|
||||
#define s390_clg(c, r, x, b, d) S390_RXY(c, 0xe321, r, x, b, d)
|
||||
#define s390_clgib(c, r, i, m, b, d) S390_RIS(c, 0xecfd, r, i, m, b, d)
|
||||
#define s390_clgij(c, r, i, b) S390_RIE_3(c, 0xec7d, r, i, m, d)
|
||||
#define s390_clgr(c, r1, r2) S390_RRE(c, 0xb921, r1, r2)
|
||||
#define s390_clgrj(c, r1, r2, m, v) S390_RIE_2(c, 0xec65, r1, r2, m, v)
|
||||
#define s390_clgrb(c, r1, r2, m3, b, d) S390_RRS(c, 0xece5, r1, r2, m3, b, d)
|
||||
#define s390_clib(c, r, i, m, b, d) S390_RIS(c, 0xecff, r, i, m, b, d)
|
||||
#define s390_clij(c, r, i, b) S390_RIE_3(c, 0xec7f, r, i, m, d)
|
||||
#define s390_clr(c, r1, r2) S390_RR(c, 0x15, r1, r2)
|
||||
#define s390_clrb(c, r1, r2, m3, b, d) S390_RRS(c, 0xecf7, r1, r2, m3, b, d)
|
||||
#define s390_clrj(c, r1, r2, m, v) S390_RIE_2(c, 0xec77, r1, r2, m, v)
|
||||
#define s390_cr(c, r1, r2) S390_RR(c, 0x19, r1, r2)
|
||||
#define s390_crb(c, r1, r2, m3, b, d) S390_RRS(c, 0xecf6, r1, r2, m3, b, d)
|
||||
#define s390_crj(c, r1, r2, m3, v) S390_RIE_2(c, 0xec76, r1, r2, m3, v)
|
||||
#define s390_crl(c, r, v) S390_RIL_1(c, 0xc6d, r, v)
|
||||
#define s390_crt(c, r1, r2, m3) S390_RRF_2(c, 0xb972, r1, r2, m3);
|
||||
#define s390_cgrt(c, r1, r2, m3) S390_RRF_2(c, 0xb960, r1, r2, m3);
|
||||
#define s390_cs(c, r1, r2, b, d) S390_RX(c, 0xba, r1, r2, b, d)
|
||||
#define s390_csg(c, r1, r2, b, d) S390_RSY_1(c, 0xeb30, r1, r2, b, d)
|
||||
#define s390_csst(c, d1, b1, d2, b2, r) S390_SSF(c, 0xc82, b1, d1, b2, d2, r)
|
||||
#define s390_csy(c, r1, r2, b, d) S390_RSY_1(c, 0xeb14, r1, r2, b, d)
|
||||
#define s390_ddbr(c, r1, r2) S390_RRE(c, 0xb31d, r1, r2)
|
||||
#define s390_debr(c, r1, r2) S390_RRE(c, 0xb30d, r1, r2)
|
||||
#define s390_didbr(c, r1, r2, m, r3) S390_RRF_3(c, 0xb35b, r1, r2, m, r3)
|
||||
#define s390_dlgr(c, r1, r2) S390_RRE(c, 0xb987, r1, r2)
|
||||
#define s390_dlr(c, r1, r2) S390_RRE(c, 0xb997, r1, r2)
|
||||
#define s390_dr(c, r1, r2) S390_RR(c, 0x1d, r1, r2)
|
||||
#define s390_dsgfr(c, r1, r2) S390_RRE(c, 0xb91d, r1, r2)
|
||||
#define s390_dsgr(c, r1, r2) S390_RRE(c, 0xb90d, r1, r2)
|
||||
#define s390_ear(c, r1, r2) S390_RRE(c, 0xb24f, r1, r2)
|
||||
#define s390_ic(c, r, x, b, d) S390_RX(c, 0x43, r, x, b, d)
|
||||
#define s390_icm(c, r, m, b, d) S390_RX(c, 0xbf, r, m, b, d)
|
||||
#define s390_icmy(c, r, x, b, d) S390_RXY(c, 0xeb81, r, x, b, d)
|
||||
#define s390_icy(c, r, x, b, d) S390_RXY(c, 0xe373, r, x, b, d)
|
||||
#define s390_iihf(c, r, v) S390_RIL_1(c, 0xc08, r, v)
|
||||
#define s390_iihh(c, r, v) S390_RI(c, 0xa50, r, v)
|
||||
#define s390_iihl(c, r, v) S390_RI(c, 0xa51, r, v)
|
||||
#define s390_iilf(c, r, v) S390_RIL_1(c, 0xc09, r, v)
|
||||
#define s390_iilh(c, r, v) S390_RI(c, 0xa52, r, v)
|
||||
#define s390_iill(c, r, v) S390_RI(c, 0xa53, r, v)
|
||||
#define s390_j(c,d) s390_brc(c, S390_CC_UN, d)
|
||||
#define s390_jc(c, m, d) s390_brc(c, m, d)
|
||||
#define s390_jcl(c, m, d) s390_brcl(c, m, d)
|
||||
#define s390_jcy(c, d) s390_brc(c, S390_CC_CY, d)
|
||||
#define s390_je(c, d) s390_brc(c, S390_CC_EQ, d)
|
||||
#define s390_jeo(c, d) s390_brc(c, S390_CC_ZR|S390_CC_OV, d)
|
||||
#define s390_jh(c, d) s390_brc(c, S390_CC_GT, d)
|
||||
#define s390_jho(c, d) s390_brc(c, S390_CC_GT|S390_CC_OV, d)
|
||||
#define s390_jl(c, d) s390_brc(c, S390_CC_LT, d)
|
||||
#define s390_jlo(c, d) s390_brc(c, S390_CC_LT|S390_CC_OV, d)
|
||||
#define s390_jm(c, d) s390_brc(c, S390_CC_LT, d)
|
||||
#define s390_jnc(c, d) s390_brc(c, S390_CC_NC, d)
|
||||
#define s390_jne(c, d) s390_brc(c, S390_CC_NZ, d)
|
||||
#define s390_jnh(c, d) s390_brc(c, S390_CC_LE, d)
|
||||
#define s390_jnl(c, d) s390_brc(c, S390_CC_GE, d)
|
||||
#define s390_jnz(c, d) s390_brc(c, S390_CC_NZ, d)
|
||||
#define s390_jo(c, d) s390_brc(c, S390_CC_OV, d)
|
||||
#define s390_jno(c, d) s390_brc(c, S390_CC_NO, d)
|
||||
#define s390_jp(c, d) s390_brc(c, S390_CC_GT, d)
|
||||
#define s390_jz(c, d) s390_brc(c, S390_CC_ZR, d)
|
||||
#define s390_jg(c,d) s390_brcl(c, S390_CC_UN, d)
|
||||
#define s390_jgcy(c, d) s390_brcl(c, S390_CC_CY, d)
|
||||
#define s390_jge(c, d) s390_brcl(c, S390_CC_EQ, d)
|
||||
#define s390_jgeo(c, d) s390_brcl(c, S390_CC_ZR|S390_CC_OV, d)
|
||||
#define s390_jgh(c, d) s390_brcl(c, S390_CC_GT, d)
|
||||
#define s390_jgho(c, d) s390_brcl(c, S390_CC_GT|S390_CC_OV, d)
|
||||
#define s390_jgl(c, d) s390_brcl(c, S390_CC_LT, d)
|
||||
#define s390_jglo(c, d) s390_brcl(c, S390_CC_LT|S390_CC_OV, d)
|
||||
#define s390_jgm(c, d) s390_brcl(c, S390_CC_LT, d)
|
||||
#define s390_jgnc(c, d) s390_brcl(c, S390_CC_NC, d)
|
||||
#define s390_jgne(c, d) s390_brcl(c, S390_CC_NZ, d)
|
||||
#define s390_jgnh(c, d) s390_brcl(c, S390_CC_LE, d)
|
||||
#define s390_jgnl(c, d) s390_brcl(c, S390_CC_GE, d)
|
||||
#define s390_jgnz(c, d) s390_brcl(c, S390_CC_NZ, d)
|
||||
#define s390_jgo(c, d) s390_brcl(c, S390_CC_OV, d)
|
||||
#define s390_jgno(c, d) s390_brcl(c, S390_CC_NO, d)
|
||||
#define s390_jgp(c, d) s390_brcl(c, S390_CC_GT, d)
|
||||
#define s390_jgz(c, d) s390_brcl(c, S390_CC_ZR, d)
|
||||
#define s390_l(c, r, x, b, d) S390_RX(c, 0x58, r, x, b, d)
|
||||
#define s390_ly(c, r, x, b, d) S390_RXY(c, 0xe358, r, x, b, d)
|
||||
#define s390_la(c, r, x, b, d) S390_RX(c, 0x41, r, x, b, d)
|
||||
#define s390_lay(c, r, x, b, d) S390_RXY(c, 0xe371, r, x, b, d)
|
||||
#define s390_lam(c, r1, r2, b, d) S390_RS_1(c, 0x9a, r1, r2, b, d)
|
||||
#define s390_larl(c, r, o) S390_RIL_1(c, 0xc00, r, o)
|
||||
#define s390_lb(c, r, x, b, d) S390_RXY(c, 0xe376, r, x, b, d)
|
||||
#define s390_lbr(c, r1, r2) S390_RRE(c, 0xb926, r1, r2)
|
||||
#define s390_lcdbr(c, r1, r2) S390_RRE(c, 0xb313, r1, r2)
|
||||
#define s390_lcgr(c, r1, r2) S390_RRE(c, 0xb903, r1, r2)
|
||||
#define s390_lcr(c, r1, r2) S390_RR(c, 0x13, r1, r2)
|
||||
#define s390_ld(c, f, x, b, d) S390_RX(c, 0x68, f, x, b, d)
|
||||
#define s390_ldy(c, r, x, b, d) S390_RXY(c, 0xed65, r, x, b, d)
|
||||
#define s390_ldeb(c, r, x, b, d) S390_RXE(c, 0xed04, r, x, b, d)
|
||||
#define s390_ldebr(c, r1, r2) S390_RRE(c, 0xb304, r1, r2)
|
||||
#define s390_ldgr(c, r1, r2) S390_RRE(c, 0xb3c1, r1, r2)
|
||||
#define s390_ldr(c, r1, r2) S390_RR(c, 0x28, r1, r2)
|
||||
#define s390_le(c, f, x, b, d) S390_RX(c, 0x78, f, x, b, d)
|
||||
#define s390_ledbr(c, r1, r2) S390_RRE(c, 0xb344, r1, r2)
|
||||
#define s390_ler(c, r1, r2) S390_RR(c, 0x38, r1, r2)
|
||||
#define s390_ley(c, r, x, b, d) S390_RXY(c, 0xed64, r, x, b, d)
|
||||
#define s390_lg(c, r, x, b, d) S390_RXY(c, 0xe304, r, x, b, d)
|
||||
#define s390_lgb(c, r, x, b, d) S390_RXY(c, 0xe377, r, x, b, d)
|
||||
#define s390_lgbr(c, r1, r2) S390_RRE(c, 0xb906, r1, r2)
|
||||
#define s390_lgdr(c, r1, r2) S390_RRE(c, 0xb3cd, r1, r2)
|
||||
#define s390_lgf(c, r, x, b, d) S390_RXY(c, 0xe314, r, x, b, d)
|
||||
#define s390_lgfi(c, r, v) S390_RIL_1(c, 0xc01, r, v)
|
||||
#define s390_lgfrl(c, r1, d) S390_RIL_1(c, 0xc4c, r1, d)
|
||||
#define s390_lgfr(c, r1, r2) S390_RRE(c, 0xb914, r1, r2)
|
||||
#define s390_lgh(c, r, x, b, d) S390_RXY(c, 0xe315, r, x, b, d)
|
||||
#define s390_lghi(c, r, v) S390_RI(c, 0xa79, r, v)
|
||||
#define s390_lghr(c, r1, r2) S390_RRE(c, 0xb907, r1, r2)
|
||||
#define s390_lgr(c, r1, r2) S390_RRE(c, 0xb904, r1, r2)
|
||||
#define s390_lgrl(c, r1, d) S390_RIL_1(c, 0xc48, r1, d)
|
||||
#define s390_lh(c, r, x, b, d) S390_RX(c, 0x48, r, x, b, d)
|
||||
#define s390_lhr(c, r1, r2) S390_RRE(c, 0xb927, r1, r2)
|
||||
#define s390_lhg(c, r, x, b, d) S390_RXY(c, 0xe315, r, x, b, d)
|
||||
#define s390_lhi(c, r, v) S390_RI(c, 0xa78, r, v)
|
||||
#define s390_lhy(c, r, x, b, d) S390_RXY(c, 0xe378, r, x, b, d)
|
||||
#define s390_llcr(c, r1, r2) S390_RRE(c, 0xb994, r1, r2)
|
||||
#define s390_llgc(c, r, x, b, d) S390_RXY(c, 0xe390, r, x, b, d)
|
||||
#define s390_llgcr(c, r1, r2) S390_RRE(c, 0xb984, r1, r2)
|
||||
#define s390_llgf(c, r, x, b, d) S390_RXY(c, 0xe316, r, x, b, d)
|
||||
#define s390_llgfr(c, r1, r2) S390_RRE(c, 0xb916, r1, r2)
|
||||
#define s390_llgh(c, r, x, b, d) S390_RXY(c, 0xe391, r, x, b, d)
|
||||
#define s390_llghr(c, r1, r2) S390_RRE(c, 0xb985, r1, r2)
|
||||
#define s390_llhr(c, r1, r2) S390_RRE(c, 0xb995, r1, r2)
|
||||
#define s390_llihf(c, r, v) S390_RIL_1(c, 0xc0e, r, v)
|
||||
#define s390_llihh(c, r, v) S390_RI(c, 0xa5c, r, v)
|
||||
#define s390_llihl(c, r, v) S390_RI(c, 0xa5d, r, v)
|
||||
#define s390_llilf(c, r, v) S390_RIL_1(c, 0xc0f, r, v)
|
||||
#define s390_llilh(c, r, v) S390_RI(c, 0xa5e, r, v)
|
||||
#define s390_llill(c, r, v) S390_RI(c, 0xa5f, r, v)
|
||||
#define s390_lm(c, r1, r2, b, d) S390_RS_1(c, 0x98, r1, r2, b, d)
|
||||
#define s390_lmg(c, r1, r2, b, d) S390_RSY_1(c, 0xeb04, r1, r2, b, d)
|
||||
#define s390_lndbr(c, r1, r2) S390_RRE(c, 0xb311, r1, r2)
|
||||
#define s390_lngr(c, r1, r2) S390_RRE(c, 0xb901, r1, r2)
|
||||
#define s390_lnr(c, r1, r2) S390_RR(c, 0x11, r1, r2)
|
||||
#define s390_lpdbr(c, r1, r2) S390_RRE(c, 0xb310, r1, r2)
|
||||
#define s390_lpgr(c, r1, r2) S390_RRE(c, 0xb900, r1, r2)
|
||||
#define s390_lpr(c, r1, r2) S390_RR(c, 0x10, r1, r2)
|
||||
#define s390_lr(c, r1, r2) S390_RR(c, 0x18, r1, r2)
|
||||
#define s390_lrl(c, r1, d) S390_RIL_1(c, 0xc4d, r1, d)
|
||||
#define s390_ltgfr(c, r1, r2) S390_RRE(c, 0xb912, r1, r2)
|
||||
#define s390_ltgr(c, r1, r2) S390_RRE(c, 0xb902, r1, r2)
|
||||
#define s390_ltr(c, r1, r2) S390_RR(c, 0x12, r1, r2)
|
||||
#define s390_lzdr(c, r) S390_RRE(c, 0xb375, r, 0)
|
||||
#define s390_lzer(c, r) S390_RRE(c, 0xb374, r, 0)
|
||||
#define s390_m(c, r, x, b, d) S390_RX(c, 0x5c, r, x, b, d)
|
||||
#define s390_mdbr(c, r1, r2) S390_RRE(c, 0xb31c, r1, r2)
|
||||
#define s390_meebr(c, r1, r2) S390_RRE(c, 0xb317, r1, r2)
|
||||
#define s390_mfy(c, r, x, b, d) S390_RXY(c, 0xe35c, r, x, b, d)
|
||||
#define s390_mlgr(c, r1, r2) S390_RRE(c, 0xb986, r1, r2)
|
||||
#define s390_mlr(c, r1, r2) S390_RRE(c, 0xb996, r1, r2)
|
||||
#define s390_mr(c, r1, r2) S390_RR(c, 0x1c, r1, r2)
|
||||
#define s390_ms(c, r, x, b, d) S390_RX(c, 0x71, r, x, b, d)
|
||||
#define s390_msi(c, r, v) S390_RIL_1(c, 0xc21, r, v)
|
||||
#define s390_msgfr(c, r1, r2) S390_RRE(c, 0xb91c, r1, r2)
|
||||
#define s390_msgi(c, r, v) S390_RIL_1(c, 0xc20, r, v)
|
||||
#define s390_msgr(c, r1, r2) S390_RRE(c, 0xb90c, r1, r2)
|
||||
#define s390_msr(c, r1, r2) S390_RRE(c, 0xb252, r1, r2)
|
||||
#define s390_mvc(c, l, b1, d1, b2, d2) S390_SS_1(c, 0xd2, l, b1, d1, b2, d2)
|
||||
#define s390_mvcl(c, r1, r2) S390_RR(c, 0x0e, r1, r2)
|
||||
#define s390_mvcle(c, r1, r3, d2, b2) S390_RS_1(c, 0xa8, r1, r3, d2, b2)
|
||||
#define s390_n(c, r, x, b, d) S390_RX(c, 0x54, r, x, b, d)
|
||||
#define s390_nc(c, l, b1, d1, b2, d2) S390_SS_1(c, 0xd4, l, b1, d1, b2, d2)
|
||||
#define s390_ng(c, r, x, b, d) S390_RXY(c, 0xe380, r, x, b, d)
|
||||
#define s390_ngr(c, r1, r2) S390_RRE(c, 0xb980, r1, r2)
|
||||
#define s390_ngrk(c, r1, r2, r3) S390_RRF_1(c, 0xb9e4, r1, r2, r3)
|
||||
#define s390_ni(c, b, d, v) S390_SI(c, 0x94, b, d, v)
|
||||
#define s390_nihf(c, r, v) S390_RIL_1(c, 0xc0a, r, v)
|
||||
#define s390_nihh(c, r, v) S390_RI(c, 0xa54, r, v)
|
||||
#define s390_nihl(c, r, v) S390_RI(c, 0xa55, r, v)
|
||||
#define s390_nilf(c, r, v) S390_RIL_1(c, 0xc0b, r, v)
|
||||
#define s390_nilh(c, r, v) S390_RI(c, 0xa56, r, v)
|
||||
#define s390_nill(c, r, v) S390_RI(c, 0xa57, r, v)
|
||||
#define s390_niy(c, b, d, v) S390_SIY(c, 0xeb54, b, d, v)
|
||||
#define s390_nop(c) S390_RR(c, 0x07, 0x0, 0)
|
||||
#define s390_nr(c, r1, r2) S390_RR(c, 0x14, r1, r2)
|
||||
#define s390_nrk(c, r1, r2) S390_RRF_1(c, 0xb9f4, r1, r2)
|
||||
#define s390_ny(c, r, x, b, d) S390_RRY(c, 0xe354, r1, r2)
|
||||
#define s390_o(c, r, x, b, d) S390_RX(c, 0x56, r, x, b, d)
|
||||
#define s390_oihf(c, r, v) S390_RIL_1(c, 0xc0c, r, v)
|
||||
#define s390_oihh(c, r, v) S390_RI(c, 0xa58, r, v)
|
||||
#define s390_oihl(c, r, v) S390_RI(c, 0xa59, r, v)
|
||||
#define s390_oilf(c, r, v) S390_RIL_1(c, 0xc0d, r, v)
|
||||
#define s390_oilh(c, r, v) S390_RI(c, 0xa5a, r, v)
|
||||
#define s390_oill(c, r, v) S390_RI(c, 0xa5b` r, v)
|
||||
#define s390_oiy(c, b, d, v) S390_SIY(c, 0xeb56 b, d, v)
|
||||
#define s390_og(c, r, x, b, d) S390_RXY(c, 0xe381, r, x, b, d)
|
||||
#define s390_ogr(c, r1, r2) S390_RRE(c, 0xb981, r1, r2)
|
||||
#define s390_or(c, r1, r2) S390_RR(c, 0x16, r1, r2)
|
||||
#define s390_s(c, r, x, b, d) S390_RX(c, 0x5b, r, x, b, d)
|
||||
#define s390_sdb(c, r, x, b, d) S390_RXE(c, 0xed1b, r, x, b, d)
|
||||
#define s390_sdbr(c, r1, r2) S390_RRE(c, 0xb31b, r1, r2)
|
||||
#define s390_sebr(c, r1, r2) S390_RRE(c, 0xb30b, r1, r2)
|
||||
#define s390_sg(c, r, x, b, d) S390_RXY(c, 0xe309, r, x, b, d)
|
||||
#define s390_sgf(c, r, x, b, d) S390_RXY(c, 0xe319, r, x, b, d)
|
||||
#define s390_sgr(c, r1, r2) S390_RRE(c, 0xb909, r1, r2)
|
||||
#define s390_sl(c, r, x, b, d) S390_RX(c, 0x5f, r, x, b, d)
|
||||
#define s390_sla(c, r, b, d) S390_RS_3(c, 0x8b, r, b, d)
|
||||
#define s390_slag(c, r1, r2, b, d) S390_RSY_1(c, 0xeb0b, r1, r2, b, d)
|
||||
#define s390_slbg(c, r, x, b, d) S390_RXY(c, 0xe389, r, x, b, d)
|
||||
#define s390_slbgr(c, r1, r2) S390_RRE(c, 0xb989, r1, r2)
|
||||
#define s390_slbr(c, r1, r2) S390_RRE(c, 0xb999, r1, r2)
|
||||
#define s390_slda(c, r, b, d) S390_RS_3(c, 0x8f, r, b, d)
|
||||
#define s390_sldl(c, r, b, d) S390_RS_3(c, 0x8d, r, b, d)
|
||||
#define s390_slfi(c, r, v) S390_RIL_1(c, 0xc25, r, v)
|
||||
#define s390_slg(c, r, x, b, d) S390_RXY(c, 0xe30b, r, x, b, d)
|
||||
#define s390_slgf(c, r, x, b, d) S390_RXY(c, 0xe31b, r, x, b, d)
|
||||
#define s390_slgfr(c, r1, r2) S390_RRE(c, 0xb91b, r1, r2)
|
||||
#define s390_slgfi(c, r, v) S390_RIL_1(c, 0xc24, r, v)
|
||||
#define s390_slgr(c, r1, r2) S390_RRE(c, 0xb90b, r1, r2)
|
||||
#define s390_sll(c, r, b, d) S390_RS_3(c, 0x89, r, b, d)
|
||||
#define s390_sllg(c, r1, r2, b, d) S390_RSY_1(c, 0xeb0d, r1, r2, b, d)
|
||||
#define s390_slr(c, r1, r2) S390_RR(c, 0x1f, r1, r2)
|
||||
#define s390_sqdbr(c, r1, r2) S390_RRE(c, 0xb315, r1, r2)
|
||||
#define s390_sqebr(c, r1, r2) S390_RRE(c, 0xb314, r1, r2)
|
||||
#define s390_sra(c, r, b, d) S390_RS_3(c, 0x8a, r, b, d)
|
||||
#define s390_srag(c, r1, r2, b, d) S390_RSY_1(c, 0xeb0a, r1, r2, b, d)
|
||||
#define s390_sr(c, r1, r2) S390_RR(c, 0x1b, r1, r2)
|
||||
#define s390_srda(c, r, b, d) S390_RS_3(c, 0x8e, r, b, d)
|
||||
#define s390_srdl(c, r, b, d) S390_RS_3(c, 0x8c, r, b, d)
|
||||
#define s390_srl(c, r, b, d) S390_RS_3(c, 0x88, r, b, d)
|
||||
#define s390_srlg(c, r1, r2, b, d) S390_RSY_1(c, 0xeb0c, r1, r2, b, d)
|
||||
#define s390_st(c, r, x, b, d) S390_RX(c, 0x50, r, x, b, d)
|
||||
#define s390_stam(c, r1, r2, b, d) S390_RS_1(c, 0x9b, r1, r2, b, d)
|
||||
#define s390_stc(c, r, x, b, d) S390_RX(c, 0x42, r, x, b, d)
|
||||
#define s390_stcm(c, r, m, b, d) S390_RX(c, 0xbe, r, m, b, d)
|
||||
#define s390_stcmy(c, r, x, b, d) S390_RXY(c, 0xeb2d, r, x, b, d)
|
||||
#define s390_stcy(c, r, x, b, d) S390_RXY(c, 0xe372, r, x, b, d)
|
||||
#define s390_std(c, f, x, b, d) S390_RX(c, 0x60, f, x, b, d)
|
||||
#define s390_stdy(c, r, x, b, d) S390_RXY(c, 0xed67, r, x, b, d)
|
||||
#define s390_ste(c, f, x, b, d) S390_RX(c, 0x70, f, x, b, d)
|
||||
#define s390_stey(c, r, x, b, d) S390_RXY(c, 0xed66, r, x, b, d)
|
||||
#define s390_stfpc(c, b, d) S390_S(c, 0xb29c, b, d)
|
||||
#define s390_stg(c, r, x, b, d) S390_RXY(c, 0xe324, r, x, b, d)
|
||||
#define s390_sth(c, r, x, b, d) S390_RX(c, 0x40, r, x, b, d)
|
||||
#define s390_sthy(c, r, x, b, d) S390_RXY(c, 0xe370, r, x, b, d)
|
||||
#define s390_stm(c, r1, r2, b, d) S390_RS_1(c, 0x90, r1, r2, b, d)
|
||||
#define s390_stmg(c, r1, r2, b, d) S390_RSY_1(c, 0xeb24, r1, r2, b, d)
|
||||
#define s390_sty(c, r, x, b, d) S390_RXY(c, 0xe350, r, x, b, d)
|
||||
#define s390_tcdb(c, r, x, b, d) S390_RXE(c, 0xed11, r, x, b, d)
|
||||
#define s390_tceb(c, r, x, b, d) S390_RXE(c, 0xed10, r, x, b, d)
|
||||
#define s390_x(c, r, x, b, d) S390_RX(c, 0x57, r, x, b, d)
|
||||
#define s390_xihf(c, r, v) S390_RIL_1(c, 0xc06, r, v)
|
||||
#define s390_xilf(c, r, v) S390_RIL_1(c, 0xc07, r, v)
|
||||
#define s390_xg(c, r, x, b, d) S390_RXY(c, 0xe382, r, x, b, d)
|
||||
#define s390_xgr(c, r1, r2) S390_RRE(c, 0xb982, r1, r2)
|
||||
#define s390_xr(c, r1, r2) S390_RR(c, 0x17, r1, r2)
|
||||
#define s390_xy(c, r, x, b, d) S390_RXY(c, 0xe357, r, x, b, d)
|
||||
#endif
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user