666 Commits

Author SHA1 Message Date
5d077cee6d Fix macos build error
Some checks failed
CMake on multiple platforms / build (Release, cl, cl, windows-latest) (push) Has been cancelled
CMake on multiple platforms / build (Release, clang, clang++, macos-latest) (push) Has been cancelled
CMake on multiple platforms / build (Release, clang, clang++, ubuntu-latest) (push) Has been cancelled
CMake on multiple platforms / build (Release, gcc, g++, ubuntu-latest) (push) Has been cancelled
2025-12-31 14:40:02 -08:00
7997417fa3 Add MacOS configure script 2025-12-31 14:38:06 -08:00
5c5dea2617 Implement KROctree::Iterator 2025-12-02 23:26:38 -08:00
19020e3c01 Remove octree-level fragment query occlusion culling. This will be replaced with a method involving hi-z buffers and mesh shaders. 2025-11-30 15:47:27 -08:00
b6179a2496 Split KRScene::render into KRScene::render and KRScene::render_occlusionResultsPass 2025-11-30 14:41:13 -08:00
4c964ec8d5 Remove Vulkan debug code 2025-11-30 13:54:11 -08:00
898e0714e4 Move KRNodeProperty to its own header file 2025-11-25 21:16:53 -08:00
eb29369eda KRNode now using KRNodeProperty 2025-11-25 21:11:49 -08:00
79c181b221 Fix compile error in KRLight. 2025-11-25 21:11:37 -08:00
a4c8b77f3a Fixed crash on initialization of KRResourceBinding encapsulated in KRNodeProperty by changing default value to an empty string rather than nullptr. Implemented KRNODE_PROPERTY_ARRAY. KRModel meshes are now using KRNODE_PROPERTY_ARRAY 2025-11-24 21:14:24 -08:00
ae9469dd62 WIP update KRModel to use KRNodeProperty. Move XML loading from KRNode to KRModel::loadXML 2025-11-24 20:17:21 -08:00
c075148ead Add hydra::AABB support to KRNodeProperty. KRLODGroup now using KRNodeProperty. 2025-11-24 19:31:26 -08:00
a7cd068e39 KRLight node info is now initialized using KRNodeProperty default values 2025-11-24 19:10:08 -08:00
36fd88d6ee Add unsigned integer support to KRNodeProperty. KRCollider now using KRNodeProperty. 2025-11-24 19:06:13 -08:00
eb4b2fcbfa KRAudioSource now using KRNodeProperty 2025-11-24 18:36:32 -08:00
14ee6f0419 Added integer support to KRNodeProperty 2025-11-24 18:17:56 -08:00
34e5b529bc KRAmbientZone node info now initialized using KRNodeProperty default values 2025-11-24 18:17:40 -08:00
aeb8f3434e KRCamera now using KRNodeProperty 2025-11-24 18:16:54 -08:00
8fc846ce6b Removed dead code from KRBone 2025-11-24 18:16:03 -08:00
30ebb97430 KRAmbientZone now using KRNodeProperty 2025-11-24 17:57:19 -08:00
9d2d788b98 KRReverbZone is now using KRNodeProperty 2025-11-23 16:07:31 -08:00
34171c7d56 Added std::string support to KRNodeProperty 2025-11-23 15:57:28 -08:00
c239d68950 KRLight is now using KRNodeProperty for texture binding 2025-11-23 15:45:08 -08:00
3d69a7154c KRSpotLight is now using KRNodeProperty 2025-11-23 15:40:34 -08:00
0a3a0d234e Add KRResourceBinding support to KRNodeProperty 2025-11-23 15:36:03 -08:00
635278022e KRAmbientZone now using KRAudioSampleBinding 2025-11-19 23:29:49 -08:00
8c52ed697f Added hydra::Vector3 support to KRNodeProperty 2025-11-19 22:31:33 -08:00
92843b93d2 Implemented bool support for KRNodeProperty. Applied KRNodeProperty to bool and float properties of KRLight 2025-11-17 22:56:29 -08:00
ead7aade63 Implement KRNodeProperty to reduce boilerplate needed for adding new node attributes 2025-11-17 22:03:45 -08:00
9b20d1ef1d Implemented getResourceBindings methods to recursively collect resource bindings from nodes and resource-to-resource connections. Replaced many KRNode::preStream() overrides with a generic handler in KRNode::preStream() that walks the resource binding tree. 2025-11-17 19:40:51 -08:00
b146886691 Streamlined resource handling in Pre-Stream with KRResourceBinding::submitRequest 2025-11-17 00:55:50 -08:00
61cc889880 KRMesh cleanup, now including lod coverage in resource requests for meshes 2025-11-17 00:05:48 -08:00
5217ab8018 Removed redundant requestResidency call for m_lightMap in KRModel 2025-11-16 23:45:04 -08:00
0abc52525d Implemented KRMesh::requestResidency 2025-11-16 23:39:08 -08:00
112fdab9f5 Removed unused argument from KRTexture::getStreamLevel 2025-11-16 23:29:15 -08:00
8b04a84470 KRCamera now using KRTextureBinding for the debug font 2025-11-16 23:24:51 -08:00
274fd7a69e Replaced more direct requestResidency calls with KRResourceRequest's 2025-11-14 23:55:44 -08:00
2e9fac869a KRMaterial is now using KRResourceRequest's to load textures 2025-11-14 23:33:44 -08:00
dec5872cf6 WIP refactoring to move resource streaming to use KRResourceRequest lists 2025-11-14 22:30:08 -08:00
d664e670f4 Refactoring - rename resetPoolExpiry to requestResidency 2025-11-13 23:02:58 -08:00
a68b1bf38d KRModel cleanup, move lightmap resource binding to prestream 2025-11-13 22:53:31 -08:00
be2116d338 Implement KRCamera::preStream 2025-11-13 22:52:43 -08:00
2ce2582318 Refactor KRResourceBinding setName method to set 2025-11-13 22:31:00 -08:00
13efe5caec Refactor KRResourceBinding load and isLoaded methods to reflect binding rather than loading 2025-11-13 22:25:34 -08:00
dbf31ceebe Move more repeated logic out of node render methods into KRScene 2025-11-13 22:17:11 -08:00
e029e0b3fc Move pre-streaming logic from KRNode and descendants to KRScene, simplifying KRNode render methods 2025-11-13 22:01:24 -08:00
614ce0a151 Fixed leak of reflected objects 2025-11-11 23:45:03 -08:00
51b8bcbc78 KRCollider is now using KRMeshBinding 2025-11-11 23:20:00 -08:00
82019987e6 Implemented KRMeshBinding, mesh lod functionality is now explicit in KRScene format and api 2025-11-11 23:07:04 -08:00
8c8aa1893c Implemented KRAudioSampleBinding, applied to KRAudioSource 2025-11-11 15:18:19 -08:00
1a602d30b1 KRMaterial now using KRTextureBinding 2025-11-11 14:54:42 -08:00
d2e116cce9 KRModel now using KRTextureBinding 2025-11-11 14:37:31 -08:00
64b89426bc KRCamera now using KRTextureBinding 2025-11-11 14:29:26 -08:00
d8eb663731 KRLight now using KRTextureBinding 2025-11-11 14:21:34 -08:00
dbb6e98307 Implemented KRResourceBinding and KRTextureBinding, apply to KRSprite 2025-11-11 14:13:17 -08:00
7cb09d8f89 Replaced setPushConstant call in KRCamera with reflection 2025-11-11 13:05:23 -08:00
53f2a85136 Replacing more setPushConstant calls with generalized reflection 2025-09-01 23:12:11 -07:00
b5b3aa028e WIP Implementing Reflection for lighting and particle systems 2025-08-31 16:17:21 -07:00
453d8d8f68 Removed bRimColor from PipelineInfo
Rim highlighting parameters now accessed through KRMesh reflection
Removed ambient_intensity and light_intensity from KRRenderSettings.  To be replaced with proper tone mapping.
2025-08-31 15:22:55 -07:00
f48d99d2c2 Update glslang
Fix code paths in getShaderValue implementations that did not return a value
2025-08-31 14:51:45 -07:00
1bd16c05c0 Updated Spirv-Reflect 2025-08-31 14:27:52 -07:00
993ce744b2 Updated VMA and VOLK 2025-08-31 14:25:27 -07:00
2c79c4ac6e Update Vulkan 2025-08-31 14:21:14 -07:00
e44a6875eb Bump Copyright year 2025-08-31 14:11:20 -07:00
37b266dc11 WIP adding shader reflection to KRMaterial.
KRNode::RenderInfo now maintains a stack of reflected objects.
WIP adding shader reflection to KRNode.
2025-08-31 01:45:34 -07:00
6ccbecda3c Fix build failure / type-o in KRRenderSettings 2025-08-31 00:56:56 -07:00
ec37ec99bd KRRenderSettings is now feeding push constants using reflection. 2025-08-31 00:54:05 -07:00
51534da431 Shader reflection now using ShaderValueType 2025-08-31 00:30:15 -07:00
97da7eaa94 Added ShaderValueType enum to shader reflection 2025-08-30 17:19:00 -07:00
7ea376574c Moved push constant bindings to reflection interface for viewports 2025-08-30 16:45:56 -07:00
eb3f88ff90 Added first push buffer binding using reflection 2025-08-30 16:07:14 -07:00
a917f70f62 WIP Shader Reflection Refactoring 2025-08-23 15:46:36 -07:00
6739e9c1a5 WIP Refactoring to generalize shader value reflection 2025-08-23 15:20:39 -07:00
9df960d181 Move push constant related code from KRPipelnie::bind to its own function, KRPipeline::updatePushConstants 2025-08-23 14:36:52 -07:00
2fc46ece57 Eliminate redundant vkCmdBindPipeline calls 2025-07-09 00:23:17 -07:00
9db005c55c Moved some material attributes to push constants
WIP updates to hello_cube smoke test; now rendering grid of cubes
2025-05-16 01:44:19 -07:00
6a136cf0ee Added normals to builtin cube model 2025-05-16 01:42:49 -07:00
802da21deb Fixed push constant reflection binding to match block name in shaders 2025-04-23 23:17:03 -07:00
2dcf7f987d Rotate camera towards cube in smoke test 2025-04-23 22:49:32 -07:00
8500ca8bea Fix indexed strip mesh support 2025-04-23 22:49:10 -07:00
8d8cfd2532 Moved frame rendering from KRCamera to KRRenderGraph 2025-04-10 01:09:36 -07:00
5f286e185e WIP Refactoring to move frame rendering from KRCamera to KRRenderGraph 2025-04-10 00:35:39 -07:00
7dc8a1304e Move Vulkan Test code from KRCamera to KRScene in preparation for upcoming scene graph refactor 2025-04-09 23:31:01 -07:00
ddfe080078 Added GPU debug markers for render passes 2025-04-09 23:03:16 -07:00
698f890500 Add GPU debug labels for render passes 2025-04-09 22:48:38 -07:00
4ccdaea970 Added KRRenderGraphDeferred and KRRenderGraphForward 2025-04-09 00:12:18 -07:00
51d6038187 Implement KRRenderGraph::getFinalRenderPass() 2025-04-08 23:45:12 -07:00
3928e247eb Added default __white material to standard assets bundle.
Assigned default __white material to all standard asset meshes.
Enabled models to be loaded prior to their referenced materials.
Refactored ObjectShader glsl for Vulkan use.
2024-09-22 19:20:45 -07:00
0a66f11ff0 Implemented API for model node creation.
hello_cube smoke test now adds a model node and assigns the built-in cube model
2024-09-21 23:32:38 -07:00
3b9a5d6f81 Moved occlusion test expiry code from KRScene::render to a dedicated function, KRViewport::expireOcclusionResults 2024-09-21 21:21:48 -07:00
8bee10c768 Refactoring to reduce parameter count for KRPipeline::bind, passing by RenderInfo 2024-09-21 17:16:13 -07:00
d7672d31f4 Refactoring to reduce KRScene::Render parameter count, passing by RenderInfo structure instead. 2024-09-21 16:46:04 -07:00
95969839ec Update volk to vulkan-sdk-1.3.290.0 2024-09-14 15:43:41 -07:00
4bf0cbb2ca Update Vulkan Memory Allocator to v3.1.0 2024-09-14 15:39:23 -07:00
cc4813136b Update spirv-reflect to vulkan-sdk-1.3.290.0 2024-09-14 15:34:13 -07:00
fa14da813b Update Vulkan to v1.3.295 2024-09-14 15:18:21 -07:00
e19be4c2a4 test_shutdown now always returns a value. 2024-09-14 14:17:35 -07:00
fc783b7d54 Add error handling for KRRenderGraphBlackFrame::Initialize failure 2024-08-20 22:36:46 -07:00
08d98eefcb WIP adding directory structure 2024-08-18 00:09:34 -07:00
77b75311e6 WIP adding directory structure 2024-08-17 23:41:58 -07:00
7e4fc361d4 WIP adding directory structure 2024-08-17 23:12:20 -07:00
862ffeeaa0 WIP adding directory structure 2024-08-17 15:54:20 -07:00
a9029193d7 Organize CMake source groups 2024-08-17 14:56:43 -07:00
a5780cea2b Implemented KRRenderGraphBlackFrame 2024-03-10 17:52:13 -07:00
fa96ffefdf Add scene argument to KRRenderGraph::render 2024-03-10 16:45:04 -07:00
1912ccd63e Removed redundant RenderPassType::RENDER_PASS_GENERATE_SHADOWMAPS
Added support for multiple color attachments in a render pass.
WIP render graph implementation.
Deleted copy constructors for KRContextObject
2024-01-22 00:35:49 -08:00
6e88d82520 WIP Render Graph Refactoring 2024-01-21 18:34:36 -08:00
b3269d7b97 WIP KRRenderGraph interface 2024-01-21 15:14:10 -08:00
9856a686cf KRCamera small cleanup 2024-01-21 15:13:31 -08:00
249988beef Added KREngine-common.h to generated projects 2024-01-21 14:52:43 -08:00
5f1e074136 Now generating separate "Public Headers" and "Private Headers" group for the Kraken library project. 2024-01-21 14:08:45 -08:00
c7afc9583d kraken_cube test now includes headers in generated projects 2024-01-21 13:56:33 -08:00
a0de671125 Now including headers in generated projects for Kraken 2024-01-21 13:48:43 -08:00
2925ea316d Bump copyright year
Update 1st party submodules
2024-01-20 19:01:29 -08:00
0ccf487caf Adding KRRenderGraph files 2024-01-20 18:55:47 -08:00
a2d125b15b Updated call sites to no longer pass clear color to KRRenderPass::Begin(), as KRRenderPass now retains the clear color after initialization.
KRRenderPass now has configurable stencil clear, load, and store operations.
2024-01-20 16:46:23 -08:00
d92a039fab KRRenderPass now keeps RenderPassInfo after initialization.
KRRenderPass now accepts clear color at initialization, no longer requiring to pass it on every instantiation.
2024-01-20 16:31:06 -08:00
b37acc1fd2 Remove test code used for verifying debug text functionality on Vulkan 2024-01-20 16:09:31 -08:00
8795e1e402 Suppressing debug text rendering until debug font texture has been streamed to the GPU. Fixes Vulkan validation errors on MacOS.
Fix Vulkan validation error on macOS when clearing with the black frame pass render pass during initialization.
2024-01-14 15:53:50 -08:00
e6706a4e1f Now rendering black frames rather than empty frames when scene isn't loaded, preventing some Vulkan validation errors.
Added keepColor, clearColor, and finalLayout attributes to KRRenderPass::RenderPassInfo.
Now able to render debug text on macOS.
2024-01-14 15:36:51 -08:00
0c6b0854f2 Updating Vulkan related submodules 2024-01-12 21:23:30 -08:00
208533f490 Fix validation error on render passes that do not clear the depth buffer on load. 2024-01-12 21:22:43 -08:00
eee56e4f36 Add VK_KHR_portability_subset to support MacOS 2024-01-12 21:22:19 -08:00
2105e9359e Vulkan surface now initializing on MacOS
Updated Volk library
2024-01-11 23:05:13 -08:00
8214cf475a Vulkan now initializing on macOS.
Still requires copying libVulkan to the binary output directory.
2024-01-10 23:09:03 -08:00
b3263d874a Add missing harness.cpp and harness.h files 2023-12-31 00:56:27 -08:00
39e23436ee WIP MacOS support for smoke test 2023-12-28 15:09:39 -08:00
402c4330bb Add toolchain for PowerPC LE 2023-12-17 14:35:01 -08:00
9953325775 Removing invalid platform check for Linux (#3) 2023-12-07 23:46:08 -08:00
1efab1c22e Merge pull request #13 from kearwood/update-submodules
Update hydra
Add headers to fix Linux CI builds
2023-12-07 23:21:32 -08:00
3bd92cf068 Add <memory> header to KREngine-common.h to fix Linux CI builds 2023-12-07 23:16:10 -08:00
62158307a3 added stdint.h to kraken.h to fix linux CI builds 2023-12-07 23:11:22 -08:00
2a84abaff9 Update hydra 2023-12-07 23:01:38 -08:00
73c77251d3 Ensure that macos builds create asset output directories for krbundles 2023-12-07 22:44:39 -08:00
74dbd2d95b Merge pull request #12 from kearwood/updating-submodules
Updating mimir and siren submodules
2023-12-07 17:21:07 -08:00
e498bd8f23 Updating mimir and siren submodules 2023-12-07 16:49:47 -08:00
6ace99b7e4 Merge pull request #2 from KrakenEngine/adding-ci
Create cmake-multi-platform.yml
2023-12-07 16:46:24 -08:00
d875108095 Update cmake-multi-platform.yml 2023-12-07 16:10:54 -08:00
f81d9b406a Update cmake-multi-platform.yml 2023-12-07 16:08:28 -08:00
b67f22387f Create cmake-multi-platform.yml 2023-12-07 16:05:19 -08:00
229a86dd33 Update Vulkan-Headers to v1.3.272 2023-12-06 14:10:09 -08:00
6eb4cc62da Set default branch to main for 1st party submodules 2023-12-06 13:59:58 -08:00
226f545a1f Update remaining 1stparty submodules to use relative paths 2023-12-06 13:52:36 -08:00
46455a1cc4 Changing to relative submodule paths 2023-12-06 13:51:09 -08:00
068b163fe4 Add .DS_Store to gitignore 2023-12-06 13:22:02 -08:00
0598d920c1 Update Siren 2023-12-06 11:46:07 -08:00
7c16b85a96 Moved Siren DSP functions to submodule 2023-12-03 23:06:17 -08:00
14110e48f1 Introducing the siren namespace, which will later be broken out into a separate library. 2023-12-03 21:58:10 -08:00
3894209a64 Fix Vulkan semaphore deletion 2023-11-23 21:46:55 -08:00
cb998d73f0 Fix compile warnings 2023-11-23 21:46:12 -08:00
67d8e6773a Enable VK_EXT_metal_surface for MacOS
Remove unused ObjC files
Fix MacOS build
2023-11-23 21:30:20 -08:00
03f76ff8b8 MacOS build fix 2023-11-23 20:25:49 -08:00
f59d3a5539 Update hydra 2023-11-23 20:22:10 -08:00
a13a7ba248 Update mimir 2023-11-23 20:21:08 -08:00
9e49749bc0 Update mimir 2023-09-13 00:44:15 -07:00
a711c0f0b4 Update mimir 2023-08-05 21:23:43 -07:00
04e0ada271 Moved hydra to its own namespace 2023-08-05 21:14:53 -07:00
b157b66d1a Moved mimir namespace to its own submodule 2023-08-05 17:15:55 -07:00
e485261e53 Refactor - rename KRDataBlock to mimir::Block 2023-08-05 16:37:16 -07:00
152f7a2d28 Move KRDevice::createImage to KRTexture::allocate 2023-06-08 23:08:42 -07:00
9a183ff354 Added mapping for gl compressed texture formats to vkFormats in KRTextureKTX 2023-05-28 22:34:32 -07:00
ea0fff0e49 Added mapping for uncompressed formats to KRTextureKTX::getFormat
KRTexture2D now dynamically sets vkFormat of images
2023-01-10 15:49:10 -08:00
dae67fd30c Update Hydra submodule 2023-01-10 14:27:11 -08:00
8845e19273 Bump copyright year. 2023-01-10 14:22:26 -08:00
ebe5682ed5 Added KRTexture::getFormat
Child class implementations are WIP
2023-01-10 14:20:27 -08:00
503bf73d65 Implemented KRTextureAnimated::getFaceCount
Implemented KRTexturePVR::getFaceCount
Implemented KRTextureTGA::getFaceCount
2022-12-20 21:28:03 -08:00
71fb105933 KRTexture::getFaceCount is now pure virtual 2022-12-20 21:12:01 -08:00
84c93a2182 KRMesh::AttributeVulkanFormat now always returns a value. 2022-12-20 20:42:03 -08:00
49620655fd KRTexture::getFaceCount() is now const
Implemented KRTextureKTX::getFaceCount()
Implemented KRTextureCube::getFaceCount()
2022-10-19 22:34:48 -07:00
223108cc4c Implemented KRTexture::getFaceCount() 2022-10-18 23:14:21 -07:00
ecfd410806 KRNode::m_childNodes replaced with a double-linked list to allow more efficient insertion. 2022-10-04 22:40:09 -07:00
ab195e1323 Implement MIP Level streaming helper functions 2022-10-03 23:05:05 -07:00
b3019e3527 Updated Hydra 2022-10-03 23:04:17 -07:00
80ecdb1f92 WIP KTX2 Format support 2022-10-03 22:21:49 -07:00
b5edc6fa35 Remove compress argument from KRTExture::uploadTexture and all descendants 2022-09-29 23:20:49 -07:00
71103f676b Now including std::mutex for all platforms 2022-09-29 00:00:19 -07:00
6607b94b44 Replaced __int32 with __int32_t 2022-09-28 23:49:49 -07:00
7e82e775c6 Removed extra qualifier in declaration of KRMeshManager::getMaxLODModel 2022-09-28 23:45:15 -07:00
2f8fa11c7f Building and linking Compressonator's cmp_core library 2022-09-28 23:20:44 -07:00
6d53ec32d0 Add Compressonator submodule 2022-09-28 22:34:06 -07:00
eecde09734 Removed KRSurface dependencies from KRPipeline 2022-09-28 22:16:04 -07:00
230783b3c9 Added KRPipeline constructor that is not dependent on KRSurface 2022-09-27 18:58:00 -07:00
a2a9714f24 Removed camera downsampling functionality no longer in use. A more advanced postfx and compositor will be implemented instead. (Continued) 2022-09-27 18:49:03 -07:00
e60e9bceab Removed camera downsampling functionality no longer in use. A more advanced postfx and compositor will be implemented instead. 2022-09-27 18:32:35 -07:00
4d244c96c3 Const-ified helper functions in KRDevice 2022-09-27 17:33:05 -07:00
741b7848c5 Implemented camera surface setting for KrUpdateNode and KrCreateNode APIs.
Cameras now render only on their assigned surface.
2022-09-26 22:06:09 -07:00
7722975dd0 Implemented KrUpdateNode API call. 2022-09-26 21:24:21 -07:00
482c03f9bb Implemented SkyBox texture change for KrCreateNode API. 2022-09-26 21:19:27 -07:00
272d3f89bc Implemented helper functions in KRContext to simplify API endpoint input validation. 2022-09-24 00:31:37 -07:00
1bb7238502 KRNode::update is now fallible.
Added stub function, KRCamera::update.
2022-09-23 23:43:06 -07:00
a186095c47 Implemented transform setting for KrCreateNode API 2022-09-23 23:31:37 -07:00
77a03d53cc Enabled KrCreateNode call in the hello_cube smoke test. 2022-09-22 23:04:03 -07:00
ad81d58ea8 Added standard constructor with just scene and name for KRModel and KRCollider.
Implemented KRNode::createNode, to create nodes declared in KrCreateNodeInfo structs.
Added stub function, KRNode::update to update node attributes from a KrNodeInfo struct.
2022-09-22 23:02:42 -07:00
ec65e788e0 Scene nodes now persist their order.
Implemented error handling and insertion logic for KRContext::createNode
Refactored KRNode::m_childNodes to be a std::list rather than a std::set
Added stub function, KRNode::createNode, which accepts a KrCreateNodeInfo structure
2022-09-22 22:32:17 -07:00
6c8bf9fa2c WIP implementing createNode API.
Added KRContext::m_nodeMap and initialization logic.
Added code to hello_cube smoke test to call KrCreateNode.  (Commented until test can pass)
2022-09-21 23:55:24 -07:00
3f4289ec08 Merged appendBeforeNode, appendAfterNode, appendFirstChildNode, and appendLastChildNode API calls into a single createNode call. 2022-09-21 23:38:49 -07:00
7a14f5122c Fixed compilation errors resulting from updated git submodules. 2022-09-21 18:33:56 -07:00
9eec4aafc7 git submodule updated 2022-09-21 18:28:50 -07:00
7a0b8cab34 Vulkan Refacatoring - Updated CMake project to no longer link OpenGL libraries 2022-09-21 18:22:26 -07:00
fa678505b7 Removed commented CMake lines for GLAD module 2022-09-21 18:20:36 -07:00
9f93941b1f Removed GLAD git module 2022-09-21 18:20:11 -07:00
4be16e3ddc Removed GLAD from CMake project
Replaced GL integer and size typedefs with native types.
2022-09-21 18:18:13 -07:00
d3912a9ffe Vulkan refactoring - Replaced GLint with int. 2022-09-21 17:59:23 -07:00
ecb1c8a50f Removed OpenGL defines from KREngine-common.h
Replaced GLDEBUG macro with an assert so code will stop when it hits OpenGL code yet to be refactored to Vulkan.
2022-09-21 17:53:06 -07:00
2a36e6a11e Re-enable camera sky box draw call 2022-09-21 01:13:16 -07:00
4c8b8d5d35 Eliminated KRTexture::getHandle 2022-09-21 01:02:56 -07:00
5219cf0ba7 Enabled draw call for debug text overlay
Vertically flipped debug text character sampling from font texture.
Debug text overlay pass now functioning in Vulkan
2022-09-21 00:59:31 -07:00
6b93fcbf87 Eliminated unused variable 2022-09-21 00:29:05 -07:00
73166ff8aa Refactoring, eliminated DescriptorSetInfo.query, merging into DescriptorSetInfo.bindings
Implemented KRPipeline::setImageBinding
Added stub function KRPipeline::updateDescriptorBinding
2022-09-21 00:27:15 -07:00
96ea71852f Implemented logic in KRPipeline to update descriptor sets.
Implemented KRTexture::getFullImageView
Implemented KRTexture::getImage
Create stub function, KRUniformBuffer::getBuffer
2022-09-21 00:11:48 -07:00
3ba80b1dd8 Implemented KRPipeline::bindDescriptorSets 2022-09-20 19:02:54 -07:00
3df8433205 Added KRPipeline::updateDescriptorSets
WIP creating and updating descriptor sets for KRPipeline binding.
2022-09-20 18:54:01 -07:00
5ab035b076 Implemented KRDevice::createDescriptorSets 2022-09-20 18:23:45 -07:00
ee091aa1fe KRDevice now allocates a global descriptor pool per each device. 2022-09-20 18:12:18 -07:00
a3ee2845d1 Vulkan refactoring - Removed OpenGL state mirroring code 2022-09-19 00:14:42 -07:00
3376f3e4be Vulkan Refactoring - Eliminated KRTextureManager::_setActiveTexture and KRTextureManager::m_iActiveTexture 2022-09-19 00:07:41 -07:00
d50b7f7831 Vulkan Refactoring - Eliminated KRTextureManager::m_boundTextures and KRTextureManager::m_boundTextureHandles 2022-09-19 00:04:03 -07:00
be6c3a148e Vulkan Refactoring - Updated KRTextureManager::selectTexture call sites to use KRShader::setImageBinding 2022-09-18 23:59:08 -07:00
9a84a3a07b Removed unused texture sampler binding for dust_particle shader 2022-09-18 23:28:28 -07:00
f4bd0d6340 Removing OpenGL code related to textures 2022-09-18 23:19:30 -07:00
8306202cf1 WIP Creating structures in KRPipeline to cache descriptor set binding reflection data.
Added stub function, KRPipeline::setImageBinding
2022-09-15 20:33:41 -07:00
183f7057e2 Added KRPipeline::StageInfo to hold cached SPV reflection information used for dynamic descriptor set and push constant binding. 2022-09-15 20:10:25 -07:00
327167c9b1 Expanded KRSurface::m_imageAvailableSemaphores and m_renderFinishedSemaphores to have one semaphore per frame in flight. (Missed files in prior commit) 2022-09-15 19:20:10 -07:00
cc4efe34e1 kMaxGraphicsCommandBuffers is now initialized to KRENGINE_MAX_FRAMES_IN_FLIGHT rather than using a magic number. 2022-09-15 19:18:54 -07:00
4d0158c0ec Added KRSurface::m_inFlightFences.
Now properly handling multiple frames in flight and waiting on fences when the CPU catches up.
2022-09-15 00:26:23 -07:00
478669ed81 Expanded KRSurface::m_imageAvailableSemaphores and m_renderFinishedSemaphores to have one semaphore per frame in flight. 2022-09-14 23:59:52 -07:00
5b70ce077d Add KRENGINE_MAX_FRAMES_IN_FLIGHT constant 2022-09-14 23:41:03 -07:00
9b46917171 Added requirement for Vulkan SPV_EXT_descriptor_indexing extension. 2022-09-13 18:18:37 -07:00
5ffc3d9b9b Refactor - DescriptorSet and DescriptorManager are now UniformBuffer and UniformBufferManager. 2022-09-13 18:18:25 -07:00
175c4e2008 Add KRDescriptorManager and KRDescriptorSet classes with stub functions. 2022-09-13 17:31:41 -07:00
5ed6b8eccd Push constants are now supported for all stages. 2022-09-09 00:38:46 -07:00
aeaed68efb Moved ShaderStage to KRShader and expanded to include all stages.
Added mapping functions, getShaderStageFromExtension and getShaderStageFlagBitsFromShaderStage.
KRShader::m_stage is now typed as ShaderStage.
2022-09-09 00:36:22 -07:00
f20f7f73d6 Centralized shader file sub-extension to shader stage mapping to KRShader. 2022-09-08 23:58:24 -07:00
e695bca3f9 Refactoring to rename uniform related functions and members to reflect that they are actually push constants after the Vulkan refactoring. 2022-09-07 23:48:46 -07:00
10f9c17cf1 Now initializing VkDescriptorSetLayout for each pipeline using SPV reflection. 2022-09-07 22:33:07 -07:00
0d848bd53b Now using more VkSamplerCreateInfo for hash generation. 2022-09-07 22:32:37 -07:00
414ec8ca81 Removed no longer relevant comment. 2022-08-30 00:38:10 -07:00
8594c7d4b1 Implemented KRSampler::destroy 2022-08-30 00:30:22 -07:00
6682cbdedd Implemented KRSampler::createSamplers 2022-08-30 00:18:47 -07:00
0e5fee2d80 Implemented KRSampler::getSampler 2022-08-29 23:59:02 -07:00
e318a5b4aa Added KRSamplerManager::DEFAULT_CLAMPED_SAMPLER and DEFAULT_WRAPPING_SAMPLER
Added KRSamplerManager::init
2022-08-25 00:00:55 -07:00
191167f9d3 Added KRSamplerManager::destroy() 2022-08-19 20:10:03 -07:00
9f245a9765 Implemented KRSamplerManager 2022-08-19 20:02:11 -07:00
5c75dc754a Fix build issue, removed unneeded stub function. 2022-08-18 19:05:24 -07:00
42e8365751 Added KRSampler and KRSamplerManager classes. Marked stub functions to be implemented. 2022-08-18 17:57:11 -07:00
cef2372ce8 Modernization - KRMesh::Submesh::vbo_data_blocks is now a vector<shared_ptr>. 2022-08-17 01:56:01 -07:00
2391ed9785 Modernization - KRMesh::m_submeshes now contains KRMesh::Submesh objects rather than pointers. Insertion done with emplace. 2022-08-16 20:08:30 -07:00
2085908017 Added KRShaderManager::Includer
Now able to include shaders from other shaders with GL_GOOGLE_include_directive.
Added vulkan_test_include.glsl and included it from vulkan_test.vert.
2022-08-15 19:48:59 -07:00
7433d54c16 Auto format C++ source 2022-08-08 01:07:26 -07:00
c5a640e22d Updated editorconfig with C++ code style 2022-08-08 00:21:57 -07:00
d3abb3ef0d Updated hydra library 2022-08-08 00:21:31 -07:00
f5855aeaec Corrected normals for KRMeshSphere so the sphere will have a smooth surface.
Disabled KRMesh::optimizeIndexes as it is crashing with certain meshes, such as those generated by KRMeshSphere
2022-08-08 00:09:02 -07:00
9b31914371 Added VS editorconfig for C++ formatting style 2022-08-07 23:56:20 -07:00
732560f732 Separate push constants can now be sent to vertex and fragment stages. 2022-08-06 00:14:21 -07:00
29d928ca29 Eliminated static_cast from KRPipeline::hasUniform
KRPipeline::setUniform now updates push constants for all stages
2022-08-05 23:44:46 -07:00
347a258c99 Fixed bug that caused indexed strip meshes to be changed to indexed triangle meshes when optimized. 2022-08-03 22:08:32 -07:00
5f32d4dede KRENGINE_ATTRIB_..._SHORT types are now mapped to equivalent Vulkan ..._SNORM types. 2022-08-02 02:15:46 -07:00
b714f7b52a Reduced verbosity of KRPipeline::Uniform 2022-08-02 01:31:13 -07:00
06f4056887 Added KRPipeline::Uniform enum class to replace existing untyped enum. 2022-08-02 01:04:00 -07:00
2dab7a2b48 Moved many KRPipeline public members to private.
Added KRPipeline::hasUniform to avoid accessing private members directly in KRMaterial.
Added KRPipeline::setUniform overload, for setting an array of Matrix4's.
2022-08-02 00:43:36 -07:00
74ed52fefd Refactoring push KRPipeline::m_pushConstantOffset and KRPipeline::m_pushConstantSize in preparation to support push constants for multiple shader stages 2022-08-01 23:44:46 -07:00
f52ddc007f Changed Vulkan test code in KRCamera::renderPost, preparing for testing the debug font shader.
Fixed bug causing KRMeshManager::KRVBOData::bind to crash when there is no index data.
2022-07-29 01:12:23 -07:00
fb6e197f2b Eliminated KRCamera::m_debug_text_indices 2022-07-29 01:01:17 -07:00
40024ed9d8 Added KRMeshManager::KRENGINE_VBO_DATA_RANDOM_PARTICLES and KRMeshManager::KRENGINE_VBO_DATA_VOLUMETRIC_LIGHTING.
The random particle and volumetric lighting plane geometry is now static, computed on initialization, and no longer lazily initialized.
Removed KRMeshManager::bindVBO function overload that accepted KRDataBlock's directly for index and vertex data.  This was creating KRVBOData objects with KRVBOData::IMMEDIATE that were no longer being owned or de-allocated by KRMeshManager.
2022-07-29 00:51:01 -07:00
5f7912524f vbo_type::TEMPORARY changed to vbo_type::IMMEDIATE.
KRMeshManager no longer allocates, owns, and deletes IMMEDIATE/TEMPORARY data.

Added KRCamera::m_debug_text_vertices, and KRCamera::m_debug_text_vbo_data in preparation for further work on immediately loaded mesh data.
2022-07-29 00:10:13 -07:00
c02ad5c3e7 KRMeshManager::bindVBO now swaps handles immediately for anything not loaded on the streamer thread. 2022-07-28 23:40:09 -07:00
33f5292c5e Added commandBuffer argument to KRDevice::graphicsUpload. 2022-07-27 23:22:51 -07:00
d19f340d32 Temporary vertex data is now uploaded synchronously in the presentation thread with the graphics command buffer. 2022-07-25 00:43:11 -07:00
6551e6d8a6 Added KRTexture::TextureHandle::destroy to eliminate duplicate code in KRTexture::destroyHandles and KRTexture::destroyNewHandles.
Now creating an image view for each KRTexture for full access.
2022-07-24 23:57:01 -07:00
9eb9cfe7c5 Added KRDevice::graphicsUpload 2022-07-22 18:31:11 -07:00
cfd8e35f29 Added KRDevice::setDebugLabel and helper function overloads. Now labeling more Vulkan objects. 2022-07-21 00:19:51 -07:00
d1553fc1bf No longer creating empty command buffers for asynchronous asset streaming when there is no activity.
Added VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT to command pools to correct validation errors.
2022-07-20 23:17:06 -07:00
b1384e0106 Fixed bug causing vertex buffers not to be bound on first draw call if the last draw call of the prior frame used the same buffer. 2022-07-20 22:54:27 -07:00
46f8af662e Staging buffers are no longer host coherent; explicitly flushing the buffers instead.
Fixed getQueueFamiliesForSharing, so it now correctly returns more than one queue family.
2022-07-20 22:37:22 -07:00
0cc6c0d40b Added GPU debug labels for textures.
Fixed bug causing Vulkan images to be constantly re-created.
2022-07-20 22:09:52 -07:00
7e8b5cb830 Removed glFlush call from KRTextureManager, which is not needed after Kraken refactor. 2022-07-20 21:35:48 -07:00
e1342ab836 Added KRDevice::checkFlushStreamBuffer. 2022-07-20 21:35:20 -07:00
8f63d9607a Added KRDevice::StagingBufferInfo to collect staging buffer related members and functions 2022-07-19 01:11:28 -07:00
ff4eb2589c Split KRDevice::initialize into multiple helper functions 2022-07-19 00:57:18 -07:00
378b5319bf Vulkan device now validated to have anisotropy capable samplers. 2022-07-19 00:21:46 -07:00
4a13f3c832 Added VkImage parameter to KRTexture::uploadTexture and all overrides.
Converted KRTextureTGA from OpenGL to Vulkan
2022-07-19 00:13:42 -07:00
2a75ee68a0 Added helper functions, KRTexture::destroyHandles and KRTexture::destroyNewHandles 2022-07-19 00:12:40 -07:00
ab86194a59 Implemented KRDevice::streamUpload overload for asynchronous image streaming 2022-07-19 00:11:30 -07:00
6392a6d04d Added KRDevice parameters to KRTexture2D::uploadTexture.
Stubbed out KRTextureTGA::compress.  To be re-implemented after Vulkan refactoring.
2022-07-18 23:08:45 -07:00
c7ed12db80 Corrected call sites of KRTexture2D::uploadTexture that were still sending a GLenum as the first argument. 2022-07-18 22:57:01 -07:00
97b2889568 Vulkan refactoring - Removed OpenGL implementation for GL_EXT_texture_storage path.
Eliminated dead OpenGL code in KRContext.h
Removed GLenum argument from KRTexture2D::uploadTexture and all implementations.
2022-07-18 22:54:45 -07:00
c8af34bc0b Vulkan refactoring - Eliminated KRTexture::m_iHandle 2022-07-18 22:30:36 -07:00
41679f0497 Bump year in shader license headers 2022-07-16 01:12:16 -07:00
90dd95ae76 Refactored KRTextureCube::createGPUTexture to use Vulkan.
Removed KRTexture::m_iNewHandle, as all references have been removed with Vulkan refactoring.
2022-07-16 00:56:16 -07:00
83ea50384f Moved queue family iteration code shared by KRDevice::createImage and KRDevice::createBuffer into a utility function.
Added imageCreateFlags argument to KRDevice::createImage
2022-07-16 00:45:17 -07:00
22b871ad2f Removed unnecessary check for maximum Vulkan allocator count in KRTexture2D::createGPUTexture 2022-07-16 00:22:53 -07:00
559df3766e KRTexture::createGLTexture renamed to createGPUTexture. Updated all child classes. 2022-07-16 00:17:25 -07:00
41a1f3bd89 Refactored KRTexture2D::createGLTexture from OpenGL to Vulkan 2022-07-16 00:12:32 -07:00
e61f8aa7d1 Added VkMemoryPropertyFlags argument to KRDevice::createImage 2022-07-16 00:03:15 -07:00
3d6dd727c2 Added pure virtual function, KRTexture2D::GetDimensions(). Implemented GetDimensions in all KRTexture2D sub classes. 2022-07-15 23:57:49 -07:00
003bee0d25 Added KRDevice::createImage 2022-07-15 23:53:42 -07:00
b857654cf6 Refactored KRTexture::resize for Vulkan. 2022-07-14 00:00:55 -07:00
1d11be0e61 Refactored KRTexture::_swapHandles for Vulkan. Added KRTexture::m_haveNewHandles. 2022-07-13 23:44:43 -07:00
85847fd2e0 Beginning refactoring of KRTexture for Vulkan. Added KRTexture::TextureHandle. 2022-07-13 23:24:46 -07:00
0382c15fe3 Re-enabling KRCamera::renderPost 2022-07-13 22:54:10 -07:00
e280ac486a Vertex data is now uploaded asynchronously, using staging buffers. 2022-07-12 00:48:53 -07:00
96e57d9344 Streaming thread now calling KRDebive::streamStart() and KRDevice::streamEnd(). 2022-07-12 00:41:37 -07:00
7ea1349fb9 Implemented Asynchronous upload (transfer queue) functions in KRDevice. 2022-07-12 00:31:30 -07:00
dfde4f876d KRDevice::createBuffer is now fallible.
Staging buffer flags corrected.
2022-07-12 00:01:27 -07:00
738cfd29ef KRDevice now creates transfer queues for each GPU. Implemented algorithm to keep graphics, compute, and transfer queue families independent when possible. 2022-07-11 23:45:08 -07:00
7f3ceebd5f Allocated staging buffers for asset upload. For each GPU, two buffers. One for asynchronous asset streaming with the transfer queue and another for immediate asset streaming with the graphics queue. 2022-07-11 22:55:08 -07:00
4bc44a8e52 Removed KRContext::getStreamingEnabled and KRContext::setStreamingEnabled, as streaming is always enabled in the runtime now. m_streamingEnabled remains as a signal that the managers have completed loading and that streaming should start. 2022-07-11 22:27:44 -07:00
fed12dbc96 Moved debug label functionality to KRDevice::createBuffer 2022-07-10 00:15:18 -07:00
6e1e07cc07 Created helper function for Vulkan Buffer creation, KRDevice::createBuffer.
Updated KRMeshManager to use KRDevice::createBuffer for vertex and index data.
2022-07-09 23:52:35 -07:00
64341c4e90 Deleted commented dead code from KRCamera::renderPost 2022-07-09 23:42:43 -07:00
73597a21c2 Removed no longer necessary glFinish call 2022-07-09 23:20:25 -07:00
d5635a4996 Converted debug_font shader to Vulkan glsl 2022-07-08 22:20:03 -07:00
6b8404c3d7 Removed rim_color and rim_power arguments from KRPipeline::bind.
Updated the call site in KRMaterial to set rim_color and rim_power explicitly.
2022-07-08 00:01:40 -07:00
b0be60cf18 Removed fade_color argument from KRPipeline::bind.
Updated call sites to only set this attribute in the one case needed (post_fx shader)
2022-07-07 23:49:27 -07:00
ee77caba9b Updated hydra.
Latest hydra version removes dead GL helper functions.
2022-07-07 23:20:50 -07:00
5dd2068e1b Replaced GL draw calls with Vulkan in KRMesh 2022-07-07 23:18:22 -07:00
44055d1e6a Replace ifdef guards with pragma once 2022-07-07 23:09:30 -07:00
c7f9277780 Update hydra 2022-07-07 23:08:54 -07:00
216cbe3eec PipelineInfo::CullMode and PipelineInfo::RasterMode are no longer within the PipelineInfo class, enabling easier forward declaration.
KRMaterial::bind now accepts remaining parameters required to set up the pipeline.
Removed GL calls from KRModel.
Replaced ifdef guards with pragma once.
KRMesh::model_format_t changed to ModelFormat and is no longer within KRMesh, enabling easier forward declaration.
2022-07-07 22:51:16 -07:00
4f3b8ad584 KRMesh::renderSubmesh non-indexed format meshes now converted to Vulkan draw calls 2022-07-07 21:44:08 -07:00
7d36a0036c Updated call sites to ensure that KRPipeline::setUniform calls are made before KRPipeline::bind calls.
Eliminated kraken::SetUniform helper functions, which are no longer used.
2022-07-07 21:37:10 -07:00
560f7da9e7 Implemented automatic binding of push constants at runtime using SPIRV-Reflection.
Replaced GL uniforms with Vulkan push constants.
2022-07-07 19:29:50 -07:00
88a1ca186b Added KRMesh::isReady
Vulkan test code now uses KRMesh and asset ingestion pipeline for vertex and index data.
Updated Vulkan test shader to match KRMesh attribute layout.
2022-07-07 00:23:14 -07:00
e976e94da1 Added index buffer support to KRMeshManager::KRVBOData::bind 2022-07-06 23:51:43 -07:00
d2c8763fd9 Added KRMeshManager::GetMaxLODModel helper function.
Refactored KRMeshManager::GetModel call sites to use GetMaxLODModel where only the maximum LOD is used.
2022-07-06 23:42:47 -07:00
85b7b2cd31 (continued...)
KRMesh::renderSubmesh is now private.
Added KRMesh::renderNoMaterials.
Replaced renderSubmesh loops outside KRMesh with calls to KRMesh::renderNoMaterials.
Added KRMesh::getVertexAttributes.
Call sites are now using KRMesh::getVertexAttributes and KRMesh::getModelFormat to configure the pipeline.
2022-07-06 23:11:00 -07:00
93d665b356 KRMesh::renderSubmesh is now private.
Added KRMesh::renderNoMaterials.
Replaced renderSubmesh loops outside KRMesh with calls to KRMesh::renderNoMaterials.
Added KRMesh::getVertexAttributes.
Call sites are now using KRMesh::getVertexAttributes and KRMesh::getModelFormat to configure the pipeline.
2022-07-06 23:04:43 -07:00
b7e4415b16 Inlined, removed wrapper function KRPipelineManager::selectPipeline 2022-07-06 21:59:50 -07:00
8e9885b46c WIP Inlining KRPipelineManager::selectPipeline wrapper function. 2022-07-05 22:22:48 -07:00
d76ce2090d Eliminated one overload of KRPipelineManager::selectPipeline
Vulkan draw call refactoring
2022-07-05 22:08:05 -07:00
54e484bd71 Replacing glDraw commands with vkCmdDraw and populating PipelineInfo with vertex formats. 2022-07-05 21:40:26 -07:00
bbc0de400c Added PipelineInfo::vertexAttributes and PipelineInfo::modelFormat
KRPipelineManager::getPipeline now has just one version with two arguments.
Commented out GL version of getPipeline, to be later merged into the Vulkan version.
2022-07-05 21:27:41 -07:00
ad64ab506a Eliminated dead functions. 2022-07-04 22:21:28 -07:00
68c3831fde Added composite buffer render passes for deferred lighting path.
Refactoring KRCamera::renderFrame to use render passes.
Eliminate composite buffer binding GL code from KRCamera::renderFrame
2022-07-04 22:08:05 -07:00
17113b59ea Removing no longer needed OpenGL code. 2022-07-04 21:20:43 -07:00
943bbfda2f Added PipelineInfo::CullMode
Replaced GL culling functions with CullMode pipeline option.
2022-07-04 20:49:46 -07:00
b801da7eb3 Blending and depth testing refactoring to Vulkan. Eliminating OpenGL state following. 2022-07-04 20:18:00 -07:00
2e371386cf Added PipelineInfo::RasterMode::kOpaqueNoDepthWrite
Refactored additional GL depth and blending state to use RasterMode
2022-07-03 21:52:54 -07:00
44be42a4a8 VkPipelineColorBlendAttachmentState and VkPipelineDepthStencilStateCreateInfo are now driven by PipelineInfo::RasterMode 2022-07-03 21:33:52 -07:00
e0e51c3f07 Added PipeLineInfo::RasterMode::kOpaqueLessTest
Refactored particles and additive effects to use PipelineInfo::RasterMode rather than direct GL calls.
2022-07-03 21:13:39 -07:00
13412cb5c5 Comment type-o 2022-07-03 20:54:23 -07:00
6bb2309d07 Fixed errors in comment describing PipelineInfo::RasterMode 2022-07-02 21:04:20 -07:00
8db6a4313f Combined depth test and depth write modes into PipelineInfo.rasterMode. 2022-07-02 21:01:02 -07:00
d292c86b6e Eliminated PipelineInfo.bAlphaBlend as it can be determined from rasterMode 2022-07-02 20:23:09 -07:00
d571bcbdc3 Refactor OpenGL alpha blending to use PipelineInfo.rasterMode 2022-07-02 20:07:11 -07:00
0f8feb669c Fix Azure CI, MSVC CMake integration. Update configure batch script to VS 2022 2022-07-02 18:31:48 -07:00
d1b085ffb5 Moved PipelineInfo to KRPipeline.h
Added PipelineInfo::RasterMode
2022-04-14 00:48:03 -07:00
767ba5932b Implement KRNode::RenderInfo
Use KRNode::RenderInfo to reduce render related argument counts and pass KRSurface through render functions.
Refactor render functions to use KRNode::RenderInfo
2022-04-06 01:00:13 -07:00
52c8ec2776 Reduced boilerplate needed to select and bind a KRPipeline 2022-04-05 22:25:19 -07:00
858064fa4b Using KRPipelineManager::info struct to reduce number of parameters passed to KRPipelineManager::selectPipeline 2022-04-05 21:58:47 -07:00
9e0136f051 Updating call sites to use struct argument version of KRPipelineManager::getPipeline 2022-04-04 02:00:01 -07:00
de5d6e64aa KRPipeline::getPipeline now accepts a struct to reduce argument count 2022-04-04 00:52:32 -07:00
56abe4425f Remove KRStockGeometry as its now handled by KRMeshManager 2022-04-03 23:59:15 -07:00
1877049526 Replace GLFloat with float
Remove unimplemented function
2022-04-03 23:54:10 -07:00
2f104edf7c Remove MacOS and IOS OpenGL code 2022-04-03 23:40:16 -07:00
99394820fc Removed GLFW dependency 2022-04-03 23:31:27 -07:00
3784c0fc0b Remove XCode Project and associated interfaces which no longer match current Kraken API 2022-04-03 23:23:06 -07:00
c49e177264 Removing RenderFrame parameters no longer needed with Vulkan and KRSurface 2022-04-03 23:12:34 -07:00
c51f776899 Replace GLFloats with floats.
Refactor KRCamera and KRScene to use width and height from KRSurface rather than stack and members.
2022-04-03 23:05:30 -07:00
b6922dc63f License header year bump 2022-04-03 21:56:23 -07:00
f48fb5b14f Vulkan Refactoring - Implemented KRSwapchain 2022-04-03 21:49:54 -07:00
c58487c00f KRRenderPass now selected by KRCamera 2022-03-27 22:37:15 -07:00
5e8c9223ac Moved frameIndex to KRSurface 2022-03-27 22:14:41 -07:00
36f804e176 Implemented KRRenderPass::begin and KRRenderPass::end 2022-03-27 21:56:45 -07:00
2818deb0e3 Vulkan Refactoring - Added KRRenderPass, WIP refactorign KRScene::RenderFrame 2022-03-27 21:34:19 -07:00
9bdfb0feea Attached depth buffer to KRSurface and enabled depth testing in render pass 2022-03-01 23:53:42 -08:00
adfaf21cda Creating depth buffer for Vulkan 2022-03-01 23:24:55 -08:00
00eeb8bcb4 KRPipeline's are now created with the passed in KRMesh::model_format_t 2022-02-28 22:04:24 -08:00
4cb3566906 Test shader now using vertex buffer. Fixed CMake script so that shaders are now recompiled and re-bundled without having to re-building Kraken SDK. 2022-02-28 21:27:25 -08:00
b34ba9b096 Removing more OpenGL code from KRMeshManager 2022-02-28 20:54:03 -08:00
1a948915c6 Remove OpenGL code from KRMeshManager 2022-02-28 20:36:54 -08:00
b306670e9c Refactoring to pass command buffer through render calls, enabling Vulkan version of KRVBOData::Bind to replace the OpenGL version 2022-02-28 20:14:22 -08:00
0a18ddcbb3 Vulkan refactoring - passing VkCommandBuffer down through node render functions 2022-02-28 01:41:04 -08:00
6a56c9ebfe Added Vulkan versions of KRVBOData::bind and KRPipeline::bind 2022-02-28 01:07:32 -08:00
a26ee33e4c WIP Refactoring... 2022-02-28 00:17:12 -08:00
df344d0d7b Vertex attributes are now bound automatically to shaders using spirv reflection. 2022-02-27 23:51:29 -08:00
3c948e2337 WIP Vulkan Refactoring and reflection driven vertex attribute binding 2022-02-27 22:10:17 -08:00
d24df948c1 Added SPIRV reflection information to KRShader 2022-02-21 20:20:22 -08:00
e9df34b191 Added SPIRV-Reflect library 2022-02-21 19:35:55 -08:00
400a7e0061 WIP Binding vertex buffers 2022-02-13 22:22:51 -08:00
8414c1c0bb Added GPU debug label for shader modules 2022-02-13 21:25:57 -08:00
7166a21b81 Added GPU debug labels for vertex and index buffers with VK_EXT_debug_utils 2022-02-07 23:38:57 -08:00
227a2acaf4 Now copying vertex and index buffers to GPUs 2022-01-22 01:58:06 -08:00
100ab0d3de KRDeviceManager::getDeviceInfo refactored to KRDeviceManager::getDevice, and now returns a unique_ptr.
Now freeing vertex and index buffers.
2022-01-22 01:32:32 -08:00
ad596a82f9 WIP Index and Vertex buffer allocation 2022-01-22 01:01:08 -08:00
0330d5b4fe Commented out now broken Mesh loading OpenGL code. (Vulkan refactoring WIP) 2022-01-21 23:38:36 -08:00
d093cc6f96 Removed KRMeshManager's first-frame hackery for loading static meshes. They now load systematically. 2022-01-21 23:32:00 -08:00
739111ed2d Creating VmaAllocator object for each Vulkan device. 2022-01-15 03:34:41 -08:00
2df55cf31c Eliminated KRContext::KRENGINE_MAX_SHADER_HANDLES 2022-01-15 02:25:13 -08:00
a178ed8bcc Hard-coded dummy values for streamer thread configuration. (To be replaced after Vulkan conversion)
Eliminated KRContext::KRENGINE_MAX_SHADER_HANDLES
2022-01-15 02:24:08 -08:00
1053eb487c Imported Vulkan Memory Allocator submodule 2022-01-14 18:37:14 -08:00
3a06069184 Kraken tests now use hidpi aware windows 2021-08-18 01:20:00 -07:00
e485518227 Add explicit surface resize detection and handle window minimize. 2021-08-18 00:58:42 -07:00
2102faf4e5 Recreating swap chain when invalidated 2021-08-18 00:41:31 -07:00
42717276b5 Starting streamer thread 2021-08-17 01:49:30 -07:00
e046c1638a Remove dead code 2021-08-17 01:30:15 -07:00
f0b8dbbac5 Remove dead code 2021-08-17 01:25:53 -07:00
fc55a5d490 Session owned managers are now using std::unique_ptr 2021-08-17 01:22:18 -07:00
5d0a4bc9d2 Remove commented code 2021-08-17 00:38:11 -07:00
a3fc0d84d4 Implemented KRDeviceManager 2021-08-17 00:20:56 -07:00
f6b3845057 Added KRSurfaceManager 2021-08-16 23:36:05 -07:00
212cea794f Created KRPresentationThread 2021-08-16 22:52:26 -07:00
817cd32044 WIP Vulkan Pipeline refactoring 2021-08-16 22:04:02 -07:00
0e2bd45b7f Surface initialization and destruction moved to KRSurface 2021-08-16 19:51:15 -07:00
61a83dd28d Vulkan device initialization moved to KRDevice 2021-08-16 18:25:03 -07:00
748bd56b37 KRDevice refactoring WIP 2021-08-16 16:50:05 -07:00
d69699230a Updated HEaders 2021-08-16 16:35:36 -07:00
67ebb49d02 Update hydra 2021-08-16 16:34:21 -07:00
f8950ffc55 Added KRSurface to its own file. 2021-08-16 15:49:54 -07:00
92e7dec2fa Refactored SurfaceInfo to KRSurface and DeviceInfo to KRDevice. Created new files for KRSurface and KRDevice. 2021-08-16 15:49:17 -07:00
09b9841c03 Vulkan triangle!
Switched to Vulkan 1.1 GLSL dialect
Added vulkan test shader
Implemented test render thread function
2021-08-12 23:29:45 -07:00
1114210039 Create Vulkan semaphores for swapchain synchronization 2021-08-12 22:40:40 -07:00
0285e734bc Allocate Vulkan command buffers 2021-08-12 21:45:41 -07:00
9bc30e6937 Create vulkan command pools 2021-08-12 21:31:20 -07:00
3fff761bca Creating Vulkan framebufffers 2021-08-12 19:51:47 -07:00
12e476dc81 Surface handles are now indirect. 2021-08-12 00:45:57 -07:00
4d79896b76 Introduced KrSurfaceMapIndex type, to decouple API from internal surface indices. 2021-08-11 18:02:04 -07:00
95a506e6bf Refactor Vulkan initialization, support multi-GPU 2021-08-11 17:46:26 -07:00
348ba3270b Reverted to SPIR-V 1.3
WIP Pipeline initialization
2021-08-11 01:11:52 -07:00
e3501544db WIP Initialize PIpelines 2021-08-11 00:25:38 -07:00
ce7ecbdd9a Compiling shaders to SPIR-V 1.5
WIP Vulkan Pipeline initialization
2021-08-10 20:13:32 -07:00
8b59c5c382 Create presentation thread 2021-08-10 17:57:13 -07:00
7965da421c hello_cube project now has its own asset bundle and runs without arguments 2021-08-10 00:49:34 -07:00
831cf2d1c5 Fix warnings 2021-08-09 19:47:19 -07:00
cb43ee1b5a Bump CMake
Update project for VS2020
2021-08-09 19:42:12 -07:00
a5d18962d3 Updated Hydra 2021-08-09 19:27:43 -07:00
f1fb41a29c Vulkan Shader Module initialization 2021-05-02 21:08:14 -07:00
2385a19926 Implement GPU auto selection, preferring discrete over integrated 2021-05-02 18:31:53 -07:00
76b7e64ae6 Fixed KRDatablock::Append where the data was not expanded correctly to concatenate a std::String. Converted sprite shader. Adjusted Spirv compile logging. 2020-12-30 18:24:36 -08:00
75d3f019ae Spirv binaries are now compiled into the standard asset bundle 2020-12-30 17:03:18 -08:00
893092e0ad Merge branch 'master' of github.com:kearwood/kraken into master 2020-12-30 15:20:23 -08:00
ba3c7ce25e Standard Asset sources now added to CMake project output 2020-12-30 15:19:11 -08:00
e477a4d81f Fixed warning 2020-08-09 20:39:04 -07:00
2b0482e1c6 KrDataBlock::Append(std::string) now correctly handles null termination in output KRDataBlock when used multiple times. Implemented KrGetResourceData API call. KrCompileAllShaders now outputs shader compilation logs as a KRResource. kraken_convert now outputs shader compile logs when failure occurs. 2020-08-09 20:34:21 -07:00
eefa3718ef kraken_convert now supports reading list of assets from a file. 2020-08-09 19:05:43 -07:00
fee1195cbc Experiment - debugging Azure DevOps build failure 2020-08-07 01:40:03 -07:00
b2650474ce WIP GLSLang based compilation 2020-08-07 00:41:05 -07:00
95fdd30b02 Now only initializing glslang when compiling shaders 2020-08-06 19:03:39 -07:00
283c4e152a Improved kraken_convert command line parsing 2020-08-06 18:52:06 -07:00
78172b5abc Added KrCompileAllShaders and stub implementation 2020-08-06 18:15:58 -07:00
b405c3014f Creating image views for swap chain 2020-07-23 23:21:13 -07:00
af43934a01 Creating swap chain 2020-07-23 22:57:08 -07:00
a5aefdf3d6 WIP Creating Swap chain 2020-07-23 19:03:04 -07:00
9762e021ce A graphics device is now selected to ensure that it supports rendering to the window render surfaces 2020-07-23 18:29:03 -07:00
1ca6af364e Implemented KrCreateWindowSurface and KrDeleteWindowSurface 2020-07-23 17:03:40 -07:00
cf29556d41 WIP Implementing KrCreateWindowSurface and KrDeleteWindowSurface 2020-07-22 19:38:01 -07:00
f1d25b4cdf Disabled exceptions for stl on WIN32. Fixed warnings 2020-07-22 17:37:22 -07:00
46c356ebc5 Implemented KrMapResource 2020-07-22 17:11:27 -07:00
3737c5a250 Implemented unmapResource 2020-07-13 18:54:15 -07:00
5c349f7b94 Extenting stub functions from API into KRContext 2020-07-13 16:46:00 -07:00
784ac71c14 Added linux configure script and toolchain 2020-07-07 13:52:27 -07:00
a713c8273a Added KrSetNodeWorldTransform API Call stub function 2020-06-29 21:09:42 -07:00
7634d98641 Create structures and stub functions for scene graph manipulation 2020-06-24 23:47:00 -07:00
f7cb8b124e Now generating both static and dynamic libs. Libs are now copied to output/lib directory 2020-06-24 22:01:21 -07:00
09dce867df Public headers now copied to the output directory 2020-06-23 18:52:31 -07:00
d39df0f370 Changed submodules to use https instead of ssh 2020-06-23 15:32:22 -07:00
ae944a0a68 Updated gitmodule paths to be consistent 2020-06-23 15:16:16 -07:00
172ca74f70 Now using Volk rather than statically linking the Vulkan loader 2020-06-23 15:08:39 -07:00
4761bbc66b Implemented KrInitNodeInfo 2020-06-21 22:42:10 -07:00
0fc6ec1357 Added scene node structs to API 2020-06-12 18:49:07 -07:00
18a2bb5688 Added KrCreateScene API 2020-06-11 21:41:17 -07:00
592f811d71 Memory mapped krbundles fixed for WIN32 2020-06-08 23:23:39 -07:00
8901ac041a Now passing standard assets bundle path to test executable 2020-04-01 22:02:22 -07:00
280de9b6da Added standard_assets as dependency to hello_cube test 2020-03-26 19:24:55 -07:00
1cf55f3553 Merge branch 'master' of github.com:KrakenEngine/kraken 2019-12-08 16:42:59 -08:00
7ed62785d2 Merge pull request #1 from KrakenEngine/feature-vulkan
Feature vulkan merged to master.  Work to continue there
2019-12-08 16:36:31 -08:00
1b22313d57 CMakeList script to copy headers to output directory 2019-12-08 16:35:46 -08:00
94b351f9ee Introducing KRResourceManager superclass 2019-12-08 16:29:49 -08:00
21ca133e30 Removed old shaders and asset folders 2019-12-01 16:38:50 -08:00
1c5520fa3a Added KRShader and KRShaderManager for spir-v binaries 2019-12-01 16:20:55 -08:00
9f71c278ea Imported glslang library. Refactoring shader manager. 2019-12-01 15:49:49 -08:00
9063cf8915 Configuring CMake to build assets into output folder 2019-11-30 18:28:42 -08:00
20121e7eaa kraken_convert now takes an '-o' argument to specify the output bundle. Created cmake scripts to use kraken_convert to bundle standard assets. HRTF Kemar data is now bundled by cmake scripts. Added README.md for HRTF Kemar data 2019-11-30 17:57:45 -08:00
8abe05d950 Updated to VS 2019 2019-11-14 23:23:24 -08:00
7bfef630d0 Update Hydra submodule 2019-08-22 17:46:17 -07:00
Kearwood Kip Gilbert
aca476afa9 ShaderManager now uses SourceManager 2019-08-18 18:03:44 -07:00
Kearwood Kip Gilbert
cbbbe41cb0 Implemented KRSource and KRSourceManager. Implemented MoveToBundle api. 2019-08-18 17:57:41 -07:00
Kearwood Kip Gilbert
fdda52d406 Enabled wildcard globbing for Kraken Convert command line 2019-08-17 22:01:47 -07:00
Kearwood Kip Gilbert
3b0b087262 Fix KRDataBlock crashes on Win32 2019-08-17 21:57:55 -07:00
Kearwood Kip Gilbert
b9c737ac2f WIP async API and kraken_convert 2019-08-03 18:53:05 -07:00
Kearwood Kip Gilbert
dfce8148e3 Implementing Async API 2019-07-28 17:14:33 -07:00
Kearwood Kip Gilbert
9c72088eb3 Implementing async api 2019-07-28 16:46:46 -07:00
Kearwood Kip Gilbert
00b1d97285 Add CMake scripts for collecting assets, switch to Vulkan inspired public api 2019-07-20 13:55:16 -07:00
Kearwood Kip Gilbert
9203c81064 Fixed: KRDataBlock was reporting incorrect file size. 2019-07-18 00:18:30 -07:00
Kearwood Kip Gilbert
200536bf21 Implement asset loading for kraken_convert 2019-07-18 00:00:08 -07:00
Kearwood Kip Gilbert
cc62f34e4e Added stub project for Kraken convert utility 2019-07-17 23:41:01 -07:00
Kearwood Kip Gilbert
a0d21a7c8e Rename tool directory to toolchain 2019-07-17 23:05:16 -07:00
Kearwood Kip Gilbert
003d2c7168 Added context.cpp to cmake 2019-07-17 22:26:42 -07:00
Kearwood Kip Gilbert
6abf8c7644 Remove HACK comment, as KRMeshManager::KRMeshManager no longer segfaults 2019-07-17 22:26:15 -07:00
Kearwood Kip Gilbert
4a9009427a Replaced Facet3 with hydra's Facet3 2019-07-17 22:19:13 -07:00
Kearwood Kip Gilbert
3be32926b9 Implement pImpl pattern for KRContext/Context, fix crash in KRDataBlock 2019-07-14 15:18:48 -07:00
Kearwood Kip Gilbert
891bb18b10 Added msvc configure script. Renamed "build" scripts to "configure" scripts. 2019-07-14 14:41:10 -07:00
Kearwood Kip Gilbert
f4e68d491a Fixed zero string padding in KRResource+Obj 2019-07-14 14:29:39 -07:00
570c5ab6bf Smoke test on macos now compiles 2019-07-11 21:58:59 -07:00
9ee509b101 Add C++11 flag for macOS 2019-07-11 21:37:28 -07:00
eaab2be917 Silence some macOS build warnings 2019-07-11 21:27:05 -07:00
f9e1304571 Correct macos build errors 2019-07-11 21:26:45 -07:00
22daa9eeea Add toolchain for macos 2019-07-11 21:10:01 -07:00
Kearwood Kip Gilbert
7a5debf358 Remove try/catch block that is not needed 2019-07-11 14:24:17 -07:00
Kearwood Kip Gilbert
d7235734cd Remove check for windows 32-bit compilers, as it was erraneous. (CMAKE_SIZEOF_VOID_P was not defined). Implement toolchain and batch file for building Win64 2019-07-11 14:15:39 -07:00
Kearwood Kip Gilbert
a9dc678687 Added MSVC flag for building on all CPU cores 2019-04-03 13:53:09 -07:00
c42455e38a WIP first smoke test 2019-04-03 00:22:16 -07:00
782ba4839a Merge remote-tracking branch 'public/feature-vulkan' into feature-vulkan 2019-04-02 22:29:40 -07:00
Kearwood Kip Gilbert
ff193a5d25 Update travis config to build vulkan branch 2019-04-02 22:26:43 -07:00
c4bc9c5f2f All non-3rdparty warnings cleared. 2019-01-14 22:20:04 -08:00
5096b391de Fix more warnings in MSVC 2019-01-14 21:07:32 -08:00
cdbbd329cb Updated hydra 2019-01-14 20:22:22 -08:00
Kearwood Kip Gilbert
f84501b214 Updated hydra 2019-01-11 16:32:36 -08:00
Kearwood Kip Gilbert
f70e25d543 Update travis config to build vulkan branch 2019-01-11 15:56:57 -08:00
7b70bab8d9 Fix type conversion warnings 2019-01-11 01:07:57 -08:00
db02be6232 dos2unix crlf conversion and fix warnings 2019-01-11 00:48:33 -08:00
d5545ca6b1 Updated Hydra 2019-01-11 00:34:08 -08:00
36f6da0828 Removed old HG metadata files 2019-01-10 23:02:14 -08:00
985cc1eac3 CMake wrangling 2019-01-10 22:14:05 -08:00
667ff5e4f2 Removed Boost dependency, WIP Android (Vulkan) support 2018-11-13 18:39:32 +07:00
891de4c474 WIP context API 2018-10-27 12:47:52 -07:00
Kearwood Kip Gilbert
ae59181c24 Fixed build breakage 2018-10-09 11:16:41 -07:00
6f8a99f543 Initializing Vulkan Context 2018-08-06 21:34:16 -07:00
db13a05a7e WIP Correcting library build dependencies 2018-07-29 23:37:41 -07:00
cfa27c2bcb Added missing GL_S3_s3tc extension, adjust CMakeLists for library bundling 2018-07-27 01:09:03 -07:00
40cfa3ba1c Fixed build error due to typeo in float literals 2018-07-27 00:46:21 -07:00
de945d8992 Added needed GL extensions to GLAD 2018-07-27 00:42:45 -07:00
96412e1530 Updated Subrepos, hydra data types are now POD -- refactored Kraken to match. Eliminated some warnings 2018-07-27 00:18:30 -07:00
d31a9b0538 Switching from GLEW to GLAD, WIP refactoring math library to separate built library, 'hydra'. 2018-04-22 23:27:20 -07:00
ac479080ea Updated .gitignore 2018-02-13 23:37:16 -08:00
4f32fb26f4 Updated license in public headers 2018-02-13 10:42:03 -08:00
274f7cad6b Merge branch 'master' of https://github.com/KrakenEngine/kraken
# Conflicts:
#	kraken/CMakeLists.txt
2017-11-06 20:48:34 -08:00
8eb5e5f6ab Allow older Boost version for Travis-CI 2017-11-06 00:44:31 -08:00
1bbc8511ee Try adding boost to Linux travis-ci config 2017-11-06 00:35:58 -08:00
d0885edfeb Removed KRMeshStreamer and KRTextureStreamer dead code (replaced by KRStreamer) 2017-11-05 23:50:32 -08:00
9cf91d6332 More CMake conversion, compile fixes 2017-11-05 23:41:22 -08:00
ea1c447f1d More CMakeList additions
Set up AppKit framework
2017-11-05 21:27:09 -08:00
7e38a4c311 Added more files to CMakeLists.
Replaced KRHitInfo references with hitinfo.
Updated AudioUnitSampleType to always use floats as the Canonical types have been deprecated.  Int audio types no longer needed for ios.
2017-11-05 19:14:29 -08:00
f8e11fc724 Remove AppKit include from KREngine-common.h to fix CMake builds 2017-11-05 17:51:13 -08:00
0225f003a3 Merge branch 'master' of https://github.com/KrakenEngine/kraken 2017-11-05 17:22:46 -08:00
90c54912e9 Misc fixes for ARC and new XCode 2017-11-05 17:22:40 -08:00
68797585e6 Remove OpenAL includes 2017-11-05 17:21:33 -08:00
0d8d088cc5 Add KRContext and KRContextObject to CMakeLists 2017-10-30 22:05:44 -07:00
8eeba733a6 Avoid compiling more frameworks on non-apple platforms. 2017-10-30 22:05:23 -07:00
bf122b319f Avoid including Accelerate framework on non-apple platforms 2017-10-30 22:00:54 -07:00
4d85c2e3be CMake autodetecting boost.
Added KRDataBlock to CMakeLists
2017-10-30 20:58:14 -07:00
ef762288f4 Setting up Travis-CI upload to GitHub Releases 2017-10-06 00:23:26 -07:00
775b2d4db2 Setting up Travis-CI upload to GitHub Releases 2017-10-06 00:18:51 -07:00
00cb8af134 Setting up Travis-CI upload to GitHub Releases 2017-10-06 00:11:32 -07:00
3092ceab17 Updated KRHitInfo to current standard and exposed public header. 2017-10-05 23:51:26 -07:00
05452a1903 Setting up Travis-CI upload to GitHub Releases 2017-10-05 23:27:49 -07:00
5935c3c187 Configuring Travis-CI upload to GitHub Releases 2017-10-05 23:10:03 -07:00
90bdb88c1a Compressing CMake output 2017-10-05 22:53:59 -07:00
8821bdd1b4 Setting up CMake for MSVC 2017-10-05 21:56:29 -07:00
3c058ce3d8 Setting up CMake for MSVC 2017-10-05 21:52:47 -07:00
Kearwood Kip Gilbert
18aab5d5b4 Fixing MSVC CMake Builds 2017-10-05 16:32:27 -07:00
Kearwood Kip Gilbert
9949c6afb2 Fixing MSVC CMake Builds 2017-10-05 16:23:14 -07:00
Kearwood Kip Gilbert
4b1851a252 Fixed MSVC CMake Builds 2017-10-05 14:31:51 -07:00
ed03f12026 Added macOS builds to Travis-CI 2017-10-04 21:35:07 -07:00
429f5473be Added macOS builds to Travis-CI 2017-10-04 21:25:27 -07:00
ce191bf054 Configuring Travis CI with CMake 2017-10-04 21:21:29 -07:00
cfd00f40b3 Configuring Travis-CI 2017-10-04 18:00:01 -07:00
12414b2a77 Configuring Travis-CI 2017-10-04 17:55:09 -07:00
78ec1a3fac Adding Travis-CI 2017-10-04 17:43:10 -07:00
54406273f3 Added build/ to .gitignore 2017-10-04 17:17:24 -07:00
7b7b1fe934 Migrating to CMake, WIP 2017-10-04 17:14:50 -07:00
Kearwood Kip Gilbert
5362bbd526 /s/KRAABB/AABB/g
Cleanup, new hash<> functions
2017-07-29 19:23:21 -07:00
Kearwood Kip Gilbert
3ef4d21001 /s/KRTriangle3/Triangle3/g 2017-07-29 18:10:54 -07:00
Kearwood Kip Gilbert
4f646be2d0 /s/KRQuaternion/Quaternion/ 2017-07-29 18:02:43 -07:00
Kearwood Kip Gilbert
514b7e7ad0 /s/KRMat4/Matrix4/g 2017-07-29 17:54:27 -07:00
Kearwood Kip Gilbert
1d98f314b2 WIP organization of library 2017-07-29 01:39:41 -07:00
Kearwood Kip Gilbert
a4bc7267d3 /s/KRVector4/Vector4/g
/s/KRFloat/Scalar/g
2017-07-29 01:29:30 -07:00
Kearwood Kip Gilbert
95ff5243c5 /s/KRVector3/Vector3/g 2017-07-29 01:24:49 -07:00
Kearwood Kip Gilbert
8cf3c742e3 /s/KRVector2/Vector2/ 2017-07-29 01:20:07 -07:00
Kearwood Kip Gilbert
18b74bcbe4 WIP organization of library 2017-07-29 01:07:21 -07:00
Kearwood Kip Gilbert
3ca57d56ee WIP organization of library 2017-07-29 00:26:35 -07:00
Kearwood Kip Gilbert
4d4b176ddf Windows build errors and warning fixes 2017-07-27 23:37:46 -07:00
Kearwood Kip Gilbert
0ef0c4276d Windows build errors and warning fixes 2017-07-27 23:37:32 -07:00
Kearwood Kip Gilbert
7b1ea47f88 KRDataBlock ported to Windows 2017-07-27 23:29:28 -07:00
Kearwood Kip Gilbert
ee7c6f8a3d KRDSP_slow implemented 2017-07-26 19:22:12 -07:00
c20807fd53 Debugging CI errors 2017-07-09 23:48:06 -07:00
e529f9fbce CI Setup... 2017-07-09 23:21:30 -07:00
b21f0830cc Setup for CI 2017-07-09 23:02:21 -07:00
a0ece3039d Fixed audio source serialization, which would not properly save reference_distance, reverb, or rolloff_factor. 2017-07-09 22:29:50 -07:00
460b52ad11 Fixing warnings 2017-07-09 20:13:48 -07:00
3a1bfa8179 Fixed iOS and macOS build errors 2017-06-22 01:31:43 -07:00
77b4c1bc94 Configuring continuous integration 2017-06-22 01:19:44 -07:00
69e7c84f32 Setting up continuous integration 2017-06-22 01:16:15 -07:00
8bbe0e6355 Merge branch 'feature-windows' 2017-06-21 23:52:59 -07:00
a297a6ba75 Updated to Xcode 9 Beta
Fixed some warnings
2017-06-21 23:34:34 -07:00
dd106cc231 Merge branch 'master' of https://src.krakenengine.com/kraken 2017-06-21 22:48:35 -07:00
Kearwood Gilbert
688f1c4481 KRDSP abstraction WIP 2017-06-14 16:17:05 -07:00
Kearwood Gilbert
85d46befa3 KRDSP abstraction WIP 2017-06-14 14:56:11 -07:00
Kearwood Gilbert
b566949d6f KRDSP abstraction WIP 2017-06-14 14:09:53 -07:00
Kearwood Gilbert
bef32ab528 FFTS Windows build fixes 2017-06-11 19:06:35 -07:00
Kearwood Gilbert
7c09f57eb9 KRDSP abstraction in progress 2017-06-11 19:05:36 -07:00
Kearwood Gilbert
f62e8715ba Updating Siren for portability, WIP 2017-06-11 18:50:04 -07:00
Kearwood Gilbert
6ee26e2ae4 Updated to Win 10 SDK 2017-06-11 15:16:19 -07:00
Kearwood Gilbert
54630de5f8 Update to VS2017 2017-06-11 14:52:18 -07:00
3bb88c77bf Cleanup context handling and IOS API 2017-04-28 00:22:35 -07:00
373af248d1 Merge branch 'master' of http://src.krakenengine.com/kraken 2017-04-27 17:49:42 -07:00
41808f29c6 Cleanup warnings and bugs found through static analysis 2017-04-27 17:48:12 -07:00
55c71574e8 Merge branch 'feature-windows' of http://src.krakenengine.com/kraken 2017-04-27 14:48:12 -07:00
aa3046ee87 Ignoring xcuserdata 2017-04-26 00:00:12 -07:00
fee0a0df1c Updated project files with recommended settings from Xcode 2017-04-25 23:40:14 -07:00
4214449501 Applied Xcode recommended project file changes 2017-04-25 23:39:13 -07:00
ef5b940eaf Windows port WIP
--HG--
branch : feature-windows-support
2017-01-08 21:20:53 -08:00
Kearwood Gilbert
2459414bbe Updated FBX SDK to 2017.0.1 2016-08-07 20:28:15 -07:00
Kearwood Gilbert
623c571dc7 Removed OpenAL legacy code
Windows implementation in progress
2016-08-07 18:39:47 -07:00
Kearwood Gilbert
3a7c1ba0eb Windows implementation WIP 2016-07-10 03:33:58 -07:00
16b731cea9 Apple tvos support WIP 2016-02-01 21:11:24 -08:00
465ec1f336 GPU occlusion testing now disabled by default 2016-01-30 22:57:27 -08:00
a9772075e7 WIP OSX Support 2016-01-30 21:14:16 -08:00
f1f5258bc7 Merge 2016-01-30 20:19:57 -08:00
f356df178f WIP OSX and TvOS support 2016-01-30 20:13:23 -08:00
ee63579acb WIP Kraken updated OSX support 2015-11-06 23:09:31 -08:00
3913345a28 Kraken plist namespace changed 2015-01-12 23:09:37 -08:00
c4260617cd API Cleanup - skybox property moved from KRScene to KRCamera 2014-11-26 22:24:35 -08:00
81c6ffe095 Streamer sleep duration increased from 100 microseconds to 15 milliseconds to avoid termination in iOS builds due to too many wake cycles / second. 2014-11-03 21:31:17 -08:00
01bf0bbee9 Updated build settings - ONLY_ACTIVE_ARCH now false 2014-10-19 18:10:34 -07:00
ab08ddd09b Updated project configuration for Xcode 6 2014-10-05 23:24:59 -07:00
187b87bdae Corrected object shader's specularFactor calculation, which would result in NaN values that may propagate on some GPU's to the rest of the color calculation. This resulted in blocks of black pixels on some GPU's including the iPhone 6. 2014-10-05 23:20:34 -07:00
2ea641c28c Kraken IOS Build now generates a framework rather than a static library.
Xcode 6 now required
2014-09-15 00:33:14 -07:00
1afe308047 Separating projects into separate workspaces
--HG--
rename : KREngine/3rdparty/forsyth/forsyth.cpp => 3rdparty/forsyth/forsyth.cpp
rename : KREngine/3rdparty/forsyth/forsyth.h => 3rdparty/forsyth/forsyth.h
rename : KREngine/3rdparty/pvrtexlib/include/PVRTArray.h => 3rdparty/pvrtexlib/include/PVRTArray.h
rename : KREngine/3rdparty/pvrtexlib/include/PVRTDecompress.h => 3rdparty/pvrtexlib/include/PVRTDecompress.h
rename : KREngine/3rdparty/pvrtexlib/include/PVRTError.h => 3rdparty/pvrtexlib/include/PVRTError.h
rename : KREngine/3rdparty/pvrtexlib/include/PVRTGlobal.h => 3rdparty/pvrtexlib/include/PVRTGlobal.h
rename : KREngine/3rdparty/pvrtexlib/include/PVRTMap.h => 3rdparty/pvrtexlib/include/PVRTMap.h
rename : KREngine/3rdparty/pvrtexlib/include/PVRTString.h => 3rdparty/pvrtexlib/include/PVRTString.h
rename : KREngine/3rdparty/pvrtexlib/include/PVRTTexture.h => 3rdparty/pvrtexlib/include/PVRTTexture.h
rename : KREngine/3rdparty/pvrtexlib/include/PVRTexture.h => 3rdparty/pvrtexlib/include/PVRTexture.h
rename : KREngine/3rdparty/pvrtexlib/include/PVRTextureDefines.h => 3rdparty/pvrtexlib/include/PVRTextureDefines.h
rename : KREngine/3rdparty/pvrtexlib/include/PVRTextureFormat.h => 3rdparty/pvrtexlib/include/PVRTextureFormat.h
rename : KREngine/3rdparty/pvrtexlib/include/PVRTextureHeader.h => 3rdparty/pvrtexlib/include/PVRTextureHeader.h
rename : KREngine/3rdparty/pvrtexlib/include/PVRTextureUtilities.h => 3rdparty/pvrtexlib/include/PVRTextureUtilities.h
rename : KREngine/3rdparty/pvrtexlib/include/PVRTextureVersion.h => 3rdparty/pvrtexlib/include/PVRTextureVersion.h
rename : KREngine/3rdparty/pvrtexlib/static_osx/libPVRTexLib.a => 3rdparty/pvrtexlib/static_osx/libPVRTexLib.a
rename : KREngine/3rdparty/tinyxml2/tinyxml2.cpp => 3rdparty/tinyxml2/tinyxml2.cpp
rename : KREngine/3rdparty/tinyxml2/tinyxml2.h => 3rdparty/tinyxml2/tinyxml2.h
rename : KREngine/3rdparty/tinyxml2/tinyxml2_readme.txt => 3rdparty/tinyxml2/tinyxml2_readme.txt
rename : KREngine/Kraken.xcodeproj/project.pbxproj => Kraken.xcodeproj/project.pbxproj
rename : KREngine/Kraken.xcodeproj/project.xcworkspace/contents.xcworkspacedata => Kraken.xcodeproj/project.xcworkspace/contents.xcworkspacedata
rename : KREngine/kraken/KRAABB.cpp => kraken/KRAABB.cpp
rename : KREngine/kraken/KRAABB.h => kraken/KRAABB.h
rename : KREngine/kraken/KRAmbientZone.cpp => kraken/KRAmbientZone.cpp
rename : KREngine/kraken/KRAmbientZone.h => kraken/KRAmbientZone.h
rename : KREngine/kraken/KRAnimation.cpp => kraken/KRAnimation.cpp
rename : KREngine/kraken/KRAnimation.h => kraken/KRAnimation.h
rename : KREngine/kraken/KRAnimationAttribute.cpp => kraken/KRAnimationAttribute.cpp
rename : KREngine/kraken/KRAnimationAttribute.h => kraken/KRAnimationAttribute.h
rename : KREngine/kraken/KRAnimationCurve.cpp => kraken/KRAnimationCurve.cpp
rename : KREngine/kraken/KRAnimationCurve.h => kraken/KRAnimationCurve.h
rename : KREngine/kraken/KRAnimationCurveManager.cpp => kraken/KRAnimationCurveManager.cpp
rename : KREngine/kraken/KRAnimationCurveManager.h => kraken/KRAnimationCurveManager.h
rename : KREngine/kraken/KRAnimationLayer.cpp => kraken/KRAnimationLayer.cpp
rename : KREngine/kraken/KRAnimationLayer.h => kraken/KRAnimationLayer.h
rename : KREngine/kraken/KRAnimationManager.cpp => kraken/KRAnimationManager.cpp
rename : KREngine/kraken/KRAnimationManager.h => kraken/KRAnimationManager.h
rename : KREngine/kraken/KRAudioBuffer.cpp => kraken/KRAudioBuffer.cpp
rename : KREngine/kraken/KRAudioBuffer.h => kraken/KRAudioBuffer.h
rename : KREngine/kraken/KRAudioManager.cpp => kraken/KRAudioManager.cpp
rename : KREngine/kraken/KRAudioManager.h => kraken/KRAudioManager.h
rename : KREngine/kraken/KRAudioSample.cpp => kraken/KRAudioSample.cpp
rename : KREngine/kraken/KRAudioSample.h => kraken/KRAudioSample.h
rename : KREngine/kraken/KRAudioSource.cpp => kraken/KRAudioSource.cpp
rename : KREngine/kraken/KRAudioSource.h => kraken/KRAudioSource.h
rename : KREngine/kraken/KRBehavior.cpp => kraken/KRBehavior.cpp
rename : KREngine/kraken/KRBehavior.h => kraken/KRBehavior.h
rename : KREngine/kraken/KRBone.cpp => kraken/KRBone.cpp
rename : KREngine/kraken/KRBone.h => kraken/KRBone.h
rename : KREngine/kraken/KRBundle.cpp => kraken/KRBundle.cpp
rename : KREngine/kraken/KRBundle.h => kraken/KRBundle.h
rename : KREngine/kraken/KRBundleManager.cpp => kraken/KRBundleManager.cpp
rename : KREngine/kraken/KRBundleManager.h => kraken/KRBundleManager.h
rename : KREngine/kraken/KRCamera.cpp => kraken/KRCamera.cpp
rename : KREngine/kraken/KRCamera.h => kraken/KRCamera.h
rename : KREngine/kraken/KRCollider.cpp => kraken/KRCollider.cpp
rename : KREngine/kraken/KRCollider.h => kraken/KRCollider.h
rename : KREngine/kraken/KRContext.cpp => kraken/KRContext.cpp
rename : KREngine/kraken/KRContext.h => kraken/KRContext.h
rename : KREngine/kraken/KRContextObject.cpp => kraken/KRContextObject.cpp
rename : KREngine/kraken/KRContextObject.h => kraken/KRContextObject.h
rename : KREngine/kraken/KRDataBlock.cpp => kraken/KRDataBlock.cpp
rename : KREngine/kraken/KRDataBlock.h => kraken/KRDataBlock.h
rename : KREngine/kraken/KRDirectionalLight.cpp => kraken/KRDirectionalLight.cpp
rename : KREngine/kraken/KRDirectionalLight.h => kraken/KRDirectionalLight.h
rename : KREngine/kraken/KREngine-common.h => kraken/KREngine-common.h
rename : KREngine/kraken/KREngine.h => kraken/KREngine.h
rename : KREngine/kraken/KREngine.mm => kraken/KREngine.mm
rename : KREngine/kraken/KRFloat.cpp => kraken/KRFloat.cpp
rename : KREngine/kraken/KRFloat.h => kraken/KRFloat.h
rename : KREngine/kraken/KRHitInfo.cpp => kraken/KRHitInfo.cpp
rename : KREngine/kraken/KRHitInfo.h => kraken/KRHitInfo.h
rename : KREngine/kraken/KRLODGroup.cpp => kraken/KRLODGroup.cpp
rename : KREngine/kraken/KRLODGroup.h => kraken/KRLODGroup.h
rename : KREngine/kraken/KRLODSet.cpp => kraken/KRLODSet.cpp
rename : KREngine/kraken/KRLODSet.h => kraken/KRLODSet.h
rename : KREngine/kraken/KRLight.cpp => kraken/KRLight.cpp
rename : KREngine/kraken/KRLight.h => kraken/KRLight.h
rename : KREngine/kraken/KRLocator.cpp => kraken/KRLocator.cpp
rename : KREngine/kraken/KRLocator.h => kraken/KRLocator.h
rename : KREngine/kraken/KRMat4.cpp => kraken/KRMat4.cpp
rename : KREngine/kraken/KRMat4.h => kraken/KRMat4.h
rename : KREngine/kraken/KRMaterial.cpp => kraken/KRMaterial.cpp
rename : KREngine/kraken/KRMaterial.h => kraken/KRMaterial.h
rename : KREngine/kraken/KRMaterialManager.cpp => kraken/KRMaterialManager.cpp
rename : KREngine/kraken/KRMaterialManager.h => kraken/KRMaterialManager.h
rename : KREngine/kraken/KRMesh.cpp => kraken/KRMesh.cpp
rename : KREngine/kraken/KRMesh.h => kraken/KRMesh.h
rename : KREngine/kraken/KRMeshCube.cpp => kraken/KRMeshCube.cpp
rename : KREngine/kraken/KRMeshCube.h => kraken/KRMeshCube.h
rename : KREngine/kraken/KRMeshManager.cpp => kraken/KRMeshManager.cpp
rename : KREngine/kraken/KRMeshManager.h => kraken/KRMeshManager.h
rename : KREngine/kraken/KRMeshQuad.cpp => kraken/KRMeshQuad.cpp
rename : KREngine/kraken/KRMeshQuad.h => kraken/KRMeshQuad.h
rename : KREngine/kraken/KRMeshSphere.cpp => kraken/KRMeshSphere.cpp
rename : KREngine/kraken/KRMeshSphere.h => kraken/KRMeshSphere.h
rename : KREngine/kraken/KRMeshStreamer.mm => kraken/KRMeshStreamer.mm
rename : KREngine/kraken/KRModel.cpp => kraken/KRModel.cpp
rename : KREngine/kraken/KRModel.h => kraken/KRModel.h
rename : KREngine/kraken/KRNode.cpp => kraken/KRNode.cpp
rename : KREngine/kraken/KRNode.h => kraken/KRNode.h
rename : KREngine/kraken/KROctree.cpp => kraken/KROctree.cpp
rename : KREngine/kraken/KROctree.h => kraken/KROctree.h
rename : KREngine/kraken/KROctreeNode.cpp => kraken/KROctreeNode.cpp
rename : KREngine/kraken/KROctreeNode.h => kraken/KROctreeNode.h
rename : KREngine/kraken/KRParticleSystem.cpp => kraken/KRParticleSystem.cpp
rename : KREngine/kraken/KRParticleSystem.h => kraken/KRParticleSystem.h
rename : KREngine/kraken/KRParticleSystemNewtonian.cpp => kraken/KRParticleSystemNewtonian.cpp
rename : KREngine/kraken/KRParticleSystemNewtonian.h => kraken/KRParticleSystemNewtonian.h
rename : KREngine/kraken/KRPointLight.cpp => kraken/KRPointLight.cpp
rename : KREngine/kraken/KRPointLight.h => kraken/KRPointLight.h
rename : KREngine/kraken/KRQuaternion.cpp => kraken/KRQuaternion.cpp
rename : KREngine/kraken/KRQuaternion.h => kraken/KRQuaternion.h
rename : KREngine/kraken/KRRenderSettings.cpp => kraken/KRRenderSettings.cpp
rename : KREngine/kraken/KRRenderSettings.h => kraken/KRRenderSettings.h
rename : KREngine/kraken/KRResource+blend.cpp => kraken/KRResource+blend.cpp
rename : KREngine/kraken/KRResource+blend.h => kraken/KRResource+blend.h
rename : KREngine/kraken/KRResource+fbx.cpp => kraken/KRResource+fbx.cpp
rename : KREngine/kraken/KRResource+obj.cpp => kraken/KRResource+obj.cpp
rename : KREngine/kraken/KRResource.cpp => kraken/KRResource.cpp
rename : KREngine/kraken/KRResource.h => kraken/KRResource.h
rename : KREngine/kraken/KRReverbZone.cpp => kraken/KRReverbZone.cpp
rename : KREngine/kraken/KRReverbZone.h => kraken/KRReverbZone.h
rename : KREngine/kraken/KRScene.cpp => kraken/KRScene.cpp
rename : KREngine/kraken/KRScene.h => kraken/KRScene.h
rename : KREngine/kraken/KRSceneManager.cpp => kraken/KRSceneManager.cpp
rename : KREngine/kraken/KRSceneManager.h => kraken/KRSceneManager.h
rename : KREngine/kraken/KRShader.cpp => kraken/KRShader.cpp
rename : KREngine/kraken/KRShader.h => kraken/KRShader.h
rename : KREngine/kraken/KRShaderManager.cpp => kraken/KRShaderManager.cpp
rename : KREngine/kraken/KRShaderManager.h => kraken/KRShaderManager.h
rename : KREngine/kraken/KRSpotLight.cpp => kraken/KRSpotLight.cpp
rename : KREngine/kraken/KRSpotLight.h => kraken/KRSpotLight.h
rename : KREngine/kraken/KRSprite.cpp => kraken/KRSprite.cpp
rename : KREngine/kraken/KRSprite.h => kraken/KRSprite.h
rename : KREngine/kraken/KRStockGeometry.h => kraken/KRStockGeometry.h
rename : KREngine/kraken/KRStreamer.h => kraken/KRStreamer.h
rename : KREngine/kraken/KRStreamer.mm => kraken/KRStreamer.mm
rename : KREngine/kraken/KRTexture.cpp => kraken/KRTexture.cpp
rename : KREngine/kraken/KRTexture.h => kraken/KRTexture.h
rename : KREngine/kraken/KRTexture2D.cpp => kraken/KRTexture2D.cpp
rename : KREngine/kraken/KRTexture2D.h => kraken/KRTexture2D.h
rename : KREngine/kraken/KRTextureAnimated.cpp => kraken/KRTextureAnimated.cpp
rename : KREngine/kraken/KRTextureAnimated.h => kraken/KRTextureAnimated.h
rename : KREngine/kraken/KRTextureCube.cpp => kraken/KRTextureCube.cpp
rename : KREngine/kraken/KRTextureCube.h => kraken/KRTextureCube.h
rename : KREngine/kraken/KRTextureKTX.cpp => kraken/KRTextureKTX.cpp
rename : KREngine/kraken/KRTextureKTX.h => kraken/KRTextureKTX.h
rename : KREngine/kraken/KRTextureManager.cpp => kraken/KRTextureManager.cpp
rename : KREngine/kraken/KRTextureManager.h => kraken/KRTextureManager.h
rename : KREngine/kraken/KRTexturePVR.cpp => kraken/KRTexturePVR.cpp
rename : KREngine/kraken/KRTexturePVR.h => kraken/KRTexturePVR.h
rename : KREngine/kraken/KRTextureStreamer.mm => kraken/KRTextureStreamer.mm
rename : KREngine/kraken/KRTextureTGA.cpp => kraken/KRTextureTGA.cpp
rename : KREngine/kraken/KRTextureTGA.h => kraken/KRTextureTGA.h
rename : KREngine/kraken/KRTriangle3.cpp => kraken/KRTriangle3.cpp
rename : KREngine/kraken/KRTriangle3.h => kraken/KRTriangle3.h
rename : KREngine/kraken/KRUnknown.cpp => kraken/KRUnknown.cpp
rename : KREngine/kraken/KRUnknown.h => kraken/KRUnknown.h
rename : KREngine/kraken/KRUnknownManager.cpp => kraken/KRUnknownManager.cpp
rename : KREngine/kraken/KRUnknownManager.h => kraken/KRUnknownManager.h
rename : KREngine/kraken/KRVector2.cpp => kraken/KRVector2.cpp
rename : KREngine/kraken/KRVector2.h => kraken/KRVector2.h
rename : KREngine/kraken/KRVector3.cpp => kraken/KRVector3.cpp
rename : KREngine/kraken/KRVector3.h => kraken/KRVector3.h
rename : KREngine/kraken/KRVector4.cpp => kraken/KRVector4.cpp
rename : KREngine/kraken/KRVector4.h => kraken/KRVector4.h
rename : KREngine/kraken/KRViewport.cpp => kraken/KRViewport.cpp
rename : KREngine/kraken/KRViewport.h => kraken/KRViewport.h
rename : KREngine/kraken_ios/Kraken-Prefix.pch => kraken_ios/Kraken-Prefix.pch
rename : KREngine/kraken_osx/Kraken-Info.plist => kraken_osx/Kraken-Info.plist
rename : KRWorldBuilder/KRWorldBuilder/en.lproj/InfoPlist.strings => kraken_osx/en.lproj/InfoPlist.strings
rename : KREngine/kraken_osx/kraken-prefix.pch => kraken_osx/kraken-prefix.pch
rename : KREngine/kraken_osx/krengine_osx.h => kraken_osx/krengine_osx.h
rename : KREngine/kraken_osx/krengine_osx.mm => kraken_osx/krengine_osx.mm
rename : KREngine/kraken_standard_assets/hrtf_kemar.krbundle => kraken_standard_assets/hrtf_kemar.krbundle
rename : KREngine/kraken_standard_assets_osx/Resources-Info.plist => kraken_standard_assets_ios/Resources-Info.plist
rename : KREngine/kraken_standard_assets_ios/Shaders/ObjectShader.fsh => kraken_standard_assets_ios/Shaders/ObjectShader.fsh
rename : KREngine/kraken_standard_assets_ios/Shaders/ObjectShader.vsh => kraken_standard_assets_ios/Shaders/ObjectShader.vsh
rename : KREngine/kraken_standard_assets_ios/Shaders/PostShader.fsh => kraken_standard_assets_ios/Shaders/PostShader.fsh
rename : KREngine/kraken_standard_assets_osx/Shaders/PostShader_osx.vsh => kraken_standard_assets_ios/Shaders/PostShader.vsh
rename : KREngine/kraken_standard_assets_osx/Shaders/ShadowShader_osx.fsh => kraken_standard_assets_ios/Shaders/ShadowShader.fsh
rename : KREngine/kraken_standard_assets_ios/Shaders/ShadowShader.vsh => kraken_standard_assets_ios/Shaders/ShadowShader.vsh
rename : KREngine/kraken_standard_assets_ios/Shaders/debug_font.fsh => kraken_standard_assets_ios/Shaders/debug_font.fsh
rename : KREngine/kraken_standard_assets_osx/Shaders/debug_font_osx.vsh => kraken_standard_assets_ios/Shaders/debug_font.vsh
rename : KREngine/kraken_standard_assets_ios/Shaders/dust_particle.fsh => kraken_standard_assets_ios/Shaders/dust_particle.fsh
rename : KREngine/kraken_standard_assets_osx/Shaders/dust_particle_osx.vsh => kraken_standard_assets_ios/Shaders/dust_particle.vsh
rename : KREngine/kraken_standard_assets_ios/Shaders/flare.fsh => kraken_standard_assets_ios/Shaders/flare.fsh
rename : KREngine/kraken_standard_assets_ios/Shaders/flare.vsh => kraken_standard_assets_ios/Shaders/flare.vsh
rename : KREngine/kraken_standard_assets_osx/Shaders/light_directional_osx.fsh => kraken_standard_assets_ios/Shaders/light_directional.fsh
rename : KREngine/kraken_standard_assets_osx/Shaders/light_point_inside_osx.vsh => kraken_standard_assets_ios/Shaders/light_directional.vsh
rename : KREngine/kraken_standard_assets_osx/Shaders/light_point_osx.fsh => kraken_standard_assets_ios/Shaders/light_point.fsh
rename : KREngine/kraken_standard_assets_osx/Shaders/light_point_osx.vsh => kraken_standard_assets_ios/Shaders/light_point.vsh
rename : KREngine/kraken_standard_assets_osx/Shaders/light_point_inside_osx.fsh => kraken_standard_assets_ios/Shaders/light_point_inside.fsh
rename : KREngine/kraken_standard_assets_osx/Shaders/light_point_inside_osx.vsh => kraken_standard_assets_ios/Shaders/light_point_inside.vsh
rename : KREngine/kraken_standard_assets_ios/Shaders/occlusion_test.fsh => kraken_standard_assets_ios/Shaders/occlusion_test.fsh
rename : KREngine/kraken_standard_assets_ios/Shaders/occlusion_test.vsh => kraken_standard_assets_ios/Shaders/occlusion_test.vsh
rename : KREngine/kraken_standard_assets_osx/Shaders/simple_blit_osx.fsh => kraken_standard_assets_ios/Shaders/simple_blit.fsh
rename : KREngine/kraken_standard_assets_ios/Shaders/simple_blit.vsh => kraken_standard_assets_ios/Shaders/simple_blit.vsh
rename : KREngine/kraken_standard_assets_ios/Shaders/sky_box.fsh => kraken_standard_assets_ios/Shaders/sky_box.fsh
rename : KREngine/kraken_standard_assets_ios/Shaders/sky_box.vsh => kraken_standard_assets_ios/Shaders/sky_box.vsh
rename : KREngine/kraken_standard_assets_osx/Shaders/sprite_osx.fsh => kraken_standard_assets_ios/Shaders/sprite.fsh
rename : KREngine/kraken_standard_assets_osx/Shaders/sprite_osx.vsh => kraken_standard_assets_ios/Shaders/sprite.vsh
rename : KREngine/kraken_standard_assets_osx/Shaders/visualize_overlay_osx.fsh => kraken_standard_assets_ios/Shaders/visualize_overlay.fsh
rename : KREngine/kraken_standard_assets_ios/Shaders/visualize_overlay.vsh => kraken_standard_assets_ios/Shaders/visualize_overlay.vsh
rename : KREngine/kraken_standard_assets_ios/Shaders/volumetric_fog.fsh => kraken_standard_assets_ios/Shaders/volumetric_fog.fsh
rename : KREngine/kraken_standard_assets_osx/Shaders/volumetric_fog_osx.vsh => kraken_standard_assets_ios/Shaders/volumetric_fog.vsh
rename : KREngine/kraken_standard_assets_ios/Shaders/volumetric_fog_downsampled.fsh => kraken_standard_assets_ios/Shaders/volumetric_fog_downsampled.fsh
rename : KREngine/kraken_standard_assets_ios/Shaders/volumetric_fog_downsampled.vsh => kraken_standard_assets_ios/Shaders/volumetric_fog_downsampled.vsh
rename : KREngine/kraken_standard_assets_ios/font.pvr => kraken_standard_assets_ios/font.pvr
rename : KREngine/kraken_standard_assets_osx/Resources-Info.plist => kraken_standard_assets_osx/Resources-Info.plist
rename : KREngine/kraken_standard_assets_osx/Shaders/ObjectShader_osx.fsh => kraken_standard_assets_osx/Shaders/ObjectShader_osx.fsh
rename : KREngine/kraken_standard_assets_ios/Shaders/ObjectShader.vsh => kraken_standard_assets_osx/Shaders/ObjectShader_osx.vsh
rename : KREngine/kraken_standard_assets_osx/Shaders/PostShader_osx.fsh => kraken_standard_assets_osx/Shaders/PostShader_osx.fsh
rename : KREngine/kraken_standard_assets_osx/Shaders/PostShader_osx.vsh => kraken_standard_assets_osx/Shaders/PostShader_osx.vsh
rename : KREngine/kraken_standard_assets_osx/Shaders/ShadowShader_osx.fsh => kraken_standard_assets_osx/Shaders/ShadowShader_osx.fsh
rename : KREngine/kraken_standard_assets_ios/Shaders/ShadowShader.vsh => kraken_standard_assets_osx/Shaders/ShadowShader_osx.vsh
rename : KREngine/kraken_standard_assets_osx/Shaders/debug_font_osx.fsh => kraken_standard_assets_osx/Shaders/debug_font_osx.fsh
rename : KREngine/kraken_standard_assets_osx/Shaders/debug_font_osx.vsh => kraken_standard_assets_osx/Shaders/debug_font_osx.vsh
rename : KREngine/kraken_standard_assets_osx/Shaders/dust_particle_osx.fsh => kraken_standard_assets_osx/Shaders/dust_particle_osx.fsh
rename : KREngine/kraken_standard_assets_osx/Shaders/dust_particle_osx.vsh => kraken_standard_assets_osx/Shaders/dust_particle_osx.vsh
rename : KREngine/kraken_standard_assets_ios/Shaders/flare.fsh => kraken_standard_assets_osx/Shaders/flare_osx.fsh
rename : KREngine/kraken_standard_assets_osx/Shaders/flare_osx.vsh => kraken_standard_assets_osx/Shaders/flare_osx.vsh
rename : KREngine/kraken_standard_assets_osx/Shaders/light_directional_osx.fsh => kraken_standard_assets_osx/Shaders/light_directional_osx.fsh
rename : KREngine/kraken_standard_assets_osx/Shaders/light_point_inside_osx.vsh => kraken_standard_assets_osx/Shaders/light_directional_osx.vsh
rename : KREngine/kraken_standard_assets_osx/Shaders/light_point_inside_osx.fsh => kraken_standard_assets_osx/Shaders/light_point_inside_osx.fsh
rename : KREngine/kraken_standard_assets_osx/Shaders/light_point_inside_osx.vsh => kraken_standard_assets_osx/Shaders/light_point_inside_osx.vsh
rename : KREngine/kraken_standard_assets_osx/Shaders/light_point_osx.fsh => kraken_standard_assets_osx/Shaders/light_point_osx.fsh
rename : KREngine/kraken_standard_assets_osx/Shaders/light_point_osx.vsh => kraken_standard_assets_osx/Shaders/light_point_osx.vsh
rename : KREngine/kraken_standard_assets_ios/Shaders/occlusion_test.fsh => kraken_standard_assets_osx/Shaders/occlusion_test_osx.fsh
rename : KREngine/kraken_standard_assets_ios/Shaders/occlusion_test.vsh => kraken_standard_assets_osx/Shaders/occlusion_test_osx.vsh
rename : KREngine/kraken_standard_assets_osx/Shaders/simple_blit_osx.fsh => kraken_standard_assets_osx/Shaders/simple_blit_osx.fsh
rename : KREngine/kraken_standard_assets_ios/Shaders/simple_blit.vsh => kraken_standard_assets_osx/Shaders/simple_blit_osx.vsh
rename : KREngine/kraken_standard_assets_ios/Shaders/sky_box.fsh => kraken_standard_assets_osx/Shaders/sky_box_osx.fsh
rename : KREngine/kraken_standard_assets_osx/Shaders/sky_box_osx.vsh => kraken_standard_assets_osx/Shaders/sky_box_osx.vsh
rename : KREngine/kraken_standard_assets_osx/Shaders/sprite_osx.fsh => kraken_standard_assets_osx/Shaders/sprite_osx.fsh
rename : KREngine/kraken_standard_assets_osx/Shaders/sprite_osx.vsh => kraken_standard_assets_osx/Shaders/sprite_osx.vsh
rename : KREngine/kraken_standard_assets_osx/Shaders/visualize_overlay_osx.fsh => kraken_standard_assets_osx/Shaders/visualize_overlay_osx.fsh
rename : KREngine/kraken_standard_assets_ios/Shaders/visualize_overlay.vsh => kraken_standard_assets_osx/Shaders/visualize_overlay_osx.vsh
rename : KREngine/kraken_standard_assets_osx/Shaders/volumetric_fog_downsampled_osx.fsh => kraken_standard_assets_osx/Shaders/volumetric_fog_downsampled_osx.fsh
rename : KREngine/kraken_standard_assets_ios/Shaders/volumetric_fog_downsampled.vsh => kraken_standard_assets_osx/Shaders/volumetric_fog_downsampled_osx.vsh
rename : KREngine/kraken_standard_assets_osx/Shaders/volumetric_fog_osx.fsh => kraken_standard_assets_osx/Shaders/volumetric_fog_osx.fsh
rename : KREngine/kraken_standard_assets_osx/Shaders/volumetric_fog_osx.vsh => kraken_standard_assets_osx/Shaders/volumetric_fog_osx.vsh
rename : KREngine/kraken_standard_assets_osx/font.tga => kraken_standard_assets_osx/font.tga
2014-09-10 22:25:39 -07:00
8c965c8f0d Fixed race condition that could result in the texture and mesh streamer miscalculating the amount of GPU memory available for new asset uploads 2014-08-27 22:06:09 -07:00
9f84482ec3 Fixed mesh streaming bug that would cause the texture streamer to incorrectly estimate how much memory it has to fill, resulting in deadlocks. Symptoms include low mip level textures and / or assets that fail to load due to incorrect balance of texture and VBO memory utilization. 2014-08-27 02:24:49 -07:00
a3a6e4af78 Behaviours can now be serialized in from the scene graph xml 2014-08-24 22:18:04 -07:00
186c72334c KRBehavior serialization to / from XML in progress 2014-07-20 03:19:59 -07:00
914cae03fa Implemented KRContext::getLastFullyStreamedFrame 2014-06-25 23:00:46 -07:00
77dac3cb2f Implemented full-screen fade post-fx 2014-06-25 00:45:00 -07:00
2e169eeb9a Implemented pre-streaming of textures for KRSprite objects 2014-06-06 00:46:40 -07:00
d067ddda5f Removed hack that caused audio state to become unsynced from the render state. This hack also disabled the anti-click audio mechanism 2014-06-05 22:06:16 -07:00
1232c3da16 Now disabling reverb when the maximum reverb length parameter is set to 0.0f 2014-06-03 02:57:37 -07:00
67ccdf4471 Streamer memory management bug fixes and experimental low memory warning handler in progress. 2014-06-03 02:40:56 -07:00
9501c29ec5 Implemented logic to throttle streaming after low memory warnings occur 2014-06-01 18:08:28 -07:00
6bf013fc87 Renamed Kraken parameters to match streamer refactoring 2014-06-01 15:34:31 -07:00
c0f1228b7f OpenGL Optimization - Reduce texture related state changes 2014-06-01 00:58:28 -07:00
b92ea92f9a OpenGL Optimization - Reduced Logical Buffer Load 2014-05-31 23:46:55 -07:00
369bffc694 merged 2014-05-30 16:21:39 -07:00
5963ca5154 Refactoring of streamer code to integrate texture and vbo memory management in progress. 2014-05-29 00:14:18 -07:00
5bd97ed47e Refactoring of streamer code to integrate texture and vbo memory management in progress. 2014-05-28 23:13:14 -07:00
e6aec3a20b Refactoring of streamer code to integrate texture and vbo memory management in progress. 2014-05-28 00:02:36 -07:00
37ba588b58 Refactoring of streamer code to integrate texture and vbo memory management in progress. 2014-05-27 22:51:52 -07:00
bfefcdd055 Refactoring of streamer code to integrate texture and vbo memory management in progress. 2014-05-25 23:11:15 -07:00
Kearwood Gilbert
f0cb6ff975 Corrected project path in Kraken workspace 2014-05-21 00:10:52 -07:00
e596760d47 Merged nfb into default 2014-05-20 23:21:30 -07:00
125b8e0a04 Refactoring of streamer code to integrate texture and vbo memory management in progress.
--HG--
branch : nfb
2014-05-20 23:05:43 -07:00
50de07b6f6 Refactoring of streamer code to integrate texture and vbo memory management in progress.
--HG--
branch : nfb
2014-05-16 00:03:56 -07:00
9b58585b59 Refactoring of streamer code to integrate texture and vbo memory management in progress.
--HG--
branch : nfb
2014-05-15 23:33:01 -07:00
e96c48b59e Refactoring of streamer code to integrate texture and vbo memory management in progress.
--HG--
branch : nfb
2014-05-13 23:49:03 -07:00
dc9bec2766 Refactoring of streamer code to integrate texture and vbo memory management in progress.
--HG--
branch : nfb
2014-05-13 22:01:19 -07:00
1560c8f19f Refactoring of streamer code to integrate texture and vbo memory management in progress.
--HG--
branch : nfb
2014-05-13 21:56:06 -07:00
8d7ac095c9 Reduced memory utilization of Siren audio engine by dyanmically opening and closing the CoreAudio virtual file.
--HG--
branch : nfb
2014-05-05 23:02:13 -07:00
16953ba932 Implemented camera downsampling (without reducing the render target resolution, for temporary drops of resolution without any skipped frames)
--HG--
branch : nfb
2014-04-29 00:30:14 -07:00
e9c17df900 Implemented texture pre-streaming for lod swaps
--HG--
branch : nfb
2014-04-23 01:43:00 -07:00
admin8onf@admin8onfs-pro.nfbonf.nfb.ca
7194d39f7d Added tag Release 1.0.2 for changeset be35d6215978
--HG--
branch : nfb
2014-04-17 13:22:04 -07:00
a45b31ca21 OSX Build memory parameter tuning
Corrected bug in KTX textures that would cause a compilation failure on iOS builds.

--HG--
extra : source : bbb3a2442166488f2581d5cb720b51630324fb73
2014-01-04 19:00:44 -08:00
896311f0ac KTX Texture compression fixed for opaque textures without an alpha channel.
KTX Texture mipmaps now loading correctly.

--HG--
extra : source : 35ac38101008024955ffa4d4c6e66f8e5be026a2
2014-01-04 03:36:56 -08:00
a6fdde5978 OSX Build now running again
Implemented KTX texture file support
Implemented workflow for compressing TGA textures referenced by FBX files to KTX with DXT1 and DXT5 format.

--HG--
extra : source : 7283e7f81861682f54cda3ef6c9b0fbc9273f675
2014-01-03 02:17:27 -08:00
Peter Courtemanche
beee63336f Updated header search paths (actually reverted to the one that works)
--HG--
extra : source : 336a9573b792805e71a69c8f0240f16e06dbca40
2013-12-17 20:20:49 -08:00
Peter Courtemanche
f671b21007 Update LoadXML to use the same field names as SaveXML
--HG--
extra : source : cb9d53843ea05307e3f3e9ee1ec68b47de839f4e
2013-12-16 17:18:12 -08:00
f97c51ce44 Corrected formatting of logged messages.
--HG--
extra : source : 055166b931edaf78d482a143b5c8b6898a387904
2013-12-14 18:13:00 -08:00
b704ae5523 Corrected compile error in fbx pipeline
--HG--
extra : source : 6e6f5784434d28e7c73d67efa21047a4ab325f66
2013-12-14 18:03:51 -08:00
e466e38501 Implemented KRModel::setLightMap
Implemented KRModel::getLightMap
Corrected logging bugs and crashes during fbx import pipeline

--HG--
extra : source : d3c9f1247de05d4ecb57210faa5c1809208f7a06
2013-12-14 18:02:01 -08:00
4f61b1f96b FBX Importer messages are now sent through the logging callbacks
--HG--
extra : source : 5be63aaf609e05f9be60a36a95213f41e6d5f228
2013-12-14 16:37:14 -08:00
14aad147fe Implemented logging callbacks for client applications that would like to implement their own GUI
--HG--
extra : source : bf007f5c932c9110cbdc0dc651c66a02a0c68477
2013-12-14 16:06:44 -08:00
Peter Courtemanche
0773cbc4ba Added a quick warning message macro. KRSceneManager updates to del with NULL scenes.
--HG--
extra : source : ba524aee3db60b42cb093ef9ad76d62f11928a2f
2013-12-14 14:20:30 -08:00
33362c1c2d VBO Swapping TTY message disabled except for DEBUG builds.
Added comment with details on what actions to take if this message appears in the TTY.
2014-01-14 21:46:17 -08:00
3d907e06d5 Reverb and Ambient zone visualizations are now exposed through the debug interface.
Colliders are now imported with a prefix of collider#_ instead of collider_#_

--HG--
extra : source : 3fe036b138659b88a903859578ec9099e5ec353c
2013-12-09 22:29:13 -08:00
084c3a2788 Corrected Kraken xcode workspace. 2014-01-14 21:12:43 -08:00
736bda0ac8 Merge 2013-12-05 22:05:00 -08:00
971 changed files with 97316 additions and 45663 deletions

136
.editorconfig Normal file
View File

@@ -0,0 +1,136 @@
# Visual Studio generated .editorconfig file with C++ settings.
root = true
[*.{c++,cc,cpp,cppm,cxx,h,h++,hh,hpp,hxx,inl,ipp,ixx,tlh,tli}]
# Visual C++ Code Style settings
cpp_generate_documentation_comments = xml
# Visual C++ Formatting settings
cpp_indent_braces = false
cpp_indent_multi_line_relative_to = innermost_parenthesis
cpp_indent_within_parentheses = indent
cpp_indent_preserve_within_parentheses = true
cpp_indent_case_contents = true
cpp_indent_case_labels = false
cpp_indent_case_contents_when_block = false
cpp_indent_lambda_braces_when_parameter = true
cpp_indent_goto_labels = one_left
cpp_indent_preprocessor = leftmost_column
cpp_indent_access_specifiers = false
cpp_indent_namespace_contents = false
cpp_indent_preserve_comments = false
cpp_new_line_before_open_brace_namespace = ignore
cpp_new_line_before_open_brace_type = ignore
cpp_new_line_before_open_brace_function = ignore
cpp_new_line_before_open_brace_block = false
cpp_new_line_before_open_brace_lambda = ignore
cpp_new_line_scope_braces_on_separate_lines = false
cpp_new_line_close_brace_same_line_empty_type = false
cpp_new_line_close_brace_same_line_empty_function = false
cpp_new_line_before_catch = true
cpp_new_line_before_else = true
cpp_new_line_before_while_in_do_while = false
cpp_space_before_function_open_parenthesis = remove
cpp_space_within_parameter_list_parentheses = false
cpp_space_between_empty_parameter_list_parentheses = false
cpp_space_after_keywords_in_control_flow_statements = true
cpp_space_within_control_flow_statement_parentheses = false
cpp_space_before_lambda_open_parenthesis = false
cpp_space_within_cast_parentheses = false
cpp_space_after_cast_close_parenthesis = false
cpp_space_within_expression_parentheses = false
cpp_space_before_block_open_brace = true
cpp_space_between_empty_braces = false
cpp_space_before_initializer_list_open_brace = false
cpp_space_within_initializer_list_braces = true
cpp_space_preserve_in_initializer_list = true
cpp_space_before_open_square_bracket = false
cpp_space_within_square_brackets = false
cpp_space_before_empty_square_brackets = false
cpp_space_between_empty_square_brackets = false
cpp_space_group_square_brackets = true
cpp_space_within_lambda_brackets = false
cpp_space_between_empty_lambda_brackets = false
cpp_space_before_comma = false
cpp_space_after_comma = true
cpp_space_remove_around_member_operators = true
cpp_space_before_inheritance_colon = true
cpp_space_before_constructor_colon = true
cpp_space_remove_before_semicolon = true
cpp_space_after_semicolon = true
cpp_space_remove_around_unary_operator = true
cpp_space_around_binary_operator = insert
cpp_space_around_assignment_operator = insert
cpp_space_pointer_reference_alignment = left
cpp_space_around_ternary_operator = insert
cpp_wrap_preserve_blocks = one_liners
[*.{c++,cc,cpp,cppm,cxx,h,h++,hh,hpp,hxx,inl,ipp,ixx,tlh,tli}]
# Visual C++ Code Style settings
cpp_generate_documentation_comments = xml
# Visual C++ Formatting settings
cpp_indent_braces = false
cpp_indent_multi_line_relative_to = outermost_parenthesis
cpp_indent_within_parentheses = indent
cpp_indent_preserve_within_parentheses = true
cpp_indent_case_contents = true
cpp_indent_case_labels = false
cpp_indent_case_contents_when_block = false
cpp_indent_lambda_braces_when_parameter = true
cpp_indent_goto_labels = one_left
cpp_indent_preprocessor = leftmost_column
cpp_indent_access_specifiers = false
cpp_indent_namespace_contents = false
cpp_indent_preserve_comments = false
cpp_new_line_before_open_brace_namespace = same_line
cpp_new_line_before_open_brace_type = new_line
cpp_new_line_before_open_brace_function = new_line
cpp_new_line_before_open_brace_block = same_line
cpp_new_line_before_open_brace_lambda = same_line
cpp_new_line_scope_braces_on_separate_lines = true
cpp_new_line_close_brace_same_line_empty_type = false
cpp_new_line_close_brace_same_line_empty_function = false
cpp_new_line_before_catch = false
cpp_new_line_before_else = false
cpp_new_line_before_while_in_do_while = false
cpp_space_before_function_open_parenthesis = remove
cpp_space_within_parameter_list_parentheses = false
cpp_space_between_empty_parameter_list_parentheses = false
cpp_space_after_keywords_in_control_flow_statements = true
cpp_space_within_control_flow_statement_parentheses = false
cpp_space_before_lambda_open_parenthesis = false
cpp_space_within_cast_parentheses = false
cpp_space_after_cast_close_parenthesis = false
cpp_space_within_expression_parentheses = false
cpp_space_before_block_open_brace = true
cpp_space_between_empty_braces = false
cpp_space_before_initializer_list_open_brace = false
cpp_space_within_initializer_list_braces = true
cpp_space_preserve_in_initializer_list = true
cpp_space_before_open_square_bracket = false
cpp_space_within_square_brackets = false
cpp_space_before_empty_square_brackets = false
cpp_space_between_empty_square_brackets = false
cpp_space_group_square_brackets = true
cpp_space_within_lambda_brackets = false
cpp_space_between_empty_lambda_brackets = false
cpp_space_before_comma = false
cpp_space_after_comma = true
cpp_space_remove_around_member_operators = true
cpp_space_before_inheritance_colon = true
cpp_space_before_constructor_colon = true
cpp_space_remove_before_semicolon = true
cpp_space_after_semicolon = true
cpp_space_remove_around_unary_operator = true
cpp_space_around_binary_operator = insert
cpp_space_around_assignment_operator = insert
cpp_space_pointer_reference_alignment = left
cpp_space_around_ternary_operator = insert
cpp_wrap_preserve_blocks = never

View File

@@ -0,0 +1,84 @@
# This starter workflow is for a CMake project running on multiple platforms. There is a different starter workflow if you just want a single platform.
# See: https://github.com/actions/starter-workflows/blob/main/ci/cmake-single-platform.yml
name: CMake on multiple platforms
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
# Set fail-fast to false to ensure that feedback is delivered for all matrix combinations. Consider changing this to true when your workflow is stable.
fail-fast: false
# Set up a matrix to run the following 3 configurations:
# 1. <Windows, Release, latest MSVC compiler toolchain on the default runner image, default generator>
# 2. <Linux, Release, latest GCC compiler toolchain on the default runner image, default generator>
# 3. <Linux, Release, latest Clang compiler toolchain on the default runner image, default generator>
#
# To add more build types (Release, Debug, RelWithDebInfo, etc.) customize the build_type list.
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
build_type: [Release]
c_compiler: [gcc, clang, cl]
include:
- os: windows-latest
c_compiler: cl
cpp_compiler: cl
- os: ubuntu-latest
c_compiler: gcc
cpp_compiler: g++
- os: ubuntu-latest
c_compiler: clang
cpp_compiler: clang++
- os: macos-latest
c_compiler: clang
cpp_compiler: clang++
exclude:
- os: windows-latest
c_compiler: gcc
- os: windows-latest
c_compiler: clang
- os: ubuntu-latest
c_compiler: cl
- os: macos-latest
c_compiler: gcc
- os: macos-latest
c_compiler: cl
steps:
- uses: actions/checkout@v3
with:
submodules: 'recursive'
- name: Set reusable strings
# Turn repeated input strings (such as the build output directory) into step outputs. These step outputs can be used throughout the workflow file.
id: strings
shell: bash
run: |
echo "build-output-dir=${{ github.workspace }}/build" >> "$GITHUB_OUTPUT"
- name: Configure CMake
# Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make.
# See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type
run: >
cmake -B ${{ steps.strings.outputs.build-output-dir }}
-DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }}
-DCMAKE_C_COMPILER=${{ matrix.c_compiler }}
-DCMAKE_BUILD_TYPE=${{ matrix.build_type }}
-S ${{ github.workspace }}
- name: Build
# Build your program with the given configuration. Note that --config is needed because the default Windows generator is a multi-config generator (Visual Studio generator).
run: cmake --build ${{ steps.strings.outputs.build-output-dir }} --config ${{ matrix.build_type }}
- name: Test
working-directory: ${{ steps.strings.outputs.build-output-dir }}
# Execute tests defined by the CMake configuration. Note that --build-config is needed because the default Windows generator is a multi-config generator (Visual Studio generator).
# See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail
run: ctest --build-config ${{ matrix.build_type }}

9
.gitignore vendored Normal file
View File

@@ -0,0 +1,9 @@
.DS_Store
.vs/
Kraken.xcodeproj/xcuserdata
kraken_win/build/
build/
kraken.dir/
Win32/
x64/
kraken_win

31
.gitmodules vendored Normal file
View File

@@ -0,0 +1,31 @@
[submodule "hydra"]
path = hydra
url = ../hydra
branch = main
[submodule "3rdparty/glslang"]
path = 3rdparty/glslang
url = https://github.com/KhronosGroup/glslang
[submodule "3rdparty/vulkan"]
path = 3rdparty/vulkan
url = https://github.com/KhronosGroup/Vulkan-Headers
branch = v1.3.272
[submodule "3rdparty/volk"]
path = 3rdparty/volk
url = https://github.com/zeux/volk
[submodule "3rdparty/vma"]
path = 3rdparty/vma
url = https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git
[submodule "spirvreflect"]
path = 3rdparty/spirv-reflect
url = https://github.com/KhronosGroup/SPIRV-Reflect.git
[submodule "3rdparty/compressonator"]
path = 3rdparty/compressonator
url = https://github.com/GPUOpen-Tools/compressonator.git
[submodule "mimir"]
path = mimir
url = ../mimir
branch = main
[submodule "siren"]
path = siren
url = ../siren
branch = main

34
.travis.yml Normal file
View File

@@ -0,0 +1,34 @@
language: cpp
compiler: clang
branches:
only:
- feature-vulkan
matrix:
include:
- os: linux
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- libc++-dev
- os: osx
osx_image: xcode9.1
# Build steps
script:
- mkdir build
- cd build
- cmake .. && make
- cd archive
- tar cvzf kraken-$TRAVIS_OS_NAME-$TRAVIS_TAG.tar.gz *
deploy:
provider: releases
api_key: $GITHUB_TOKEN
file: build/archive/kraken-$TRAVIS_OS_NAME-$TRAVIS_TAG.tar.gz
skip_cleanup: true
on:
tags: true

1
3rdparty/compressonator vendored Submodule

Submodule 3rdparty/compressonator added at bab59d4330

28
3rdparty/ffts/ffts-master/.gitignore vendored Executable file
View File

@@ -0,0 +1,28 @@
*.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/*

6
3rdparty/ffts/ffts-master/AUTHORS vendored Executable file
View File

@@ -0,0 +1,6 @@
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

31
3rdparty/ffts/ffts-master/COPYRIGHT vendored Executable file
View File

@@ -0,0 +1,31 @@
/*
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.
*/

11
3rdparty/ffts/ffts-master/Makefile.am vendored Executable file
View File

@@ -0,0 +1,11 @@
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

879
3rdparty/ffts/ffts-master/Makefile.in vendored Executable file
View File

@@ -0,0 +1,879 @@
# 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:

27
3rdparty/ffts/ffts-master/README vendored Executable file
View File

@@ -0,0 +1,27 @@
FFTS -- The Fastest Fourier Transform in the South
by Anthony Blake <anthonix@me.com>
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
FFTS dynamically generates code at runtime. This can be disabled with
--disable-dynamic-code
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
Department of Computer Science
The University of Waikato
Private Bag 3105
Hamilton 3240
NEW ZEALAND

9763
3rdparty/ffts/ffts-master/aclocal.m4 vendored Executable file

File diff suppressed because it is too large Load Diff

80
3rdparty/ffts/ffts-master/build_android.sh vendored Executable file
View File

@@ -0,0 +1,80 @@
#!/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

22
3rdparty/ffts/ffts-master/build_iphone.sh vendored Executable file
View File

@@ -0,0 +1,22 @@
#/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
3rdparty/ffts/ffts-master/config.guess vendored Executable file

File diff suppressed because it is too large Load Diff

147
3rdparty/ffts/ffts-master/config.h.in vendored Executable file
View File

@@ -0,0 +1,147 @@
/* 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
3rdparty/ffts/ffts-master/config.sub vendored Executable file

File diff suppressed because it is too large Load Diff

19454
3rdparty/ffts/ffts-master/configure vendored Executable file

File diff suppressed because it is too large Load Diff

137
3rdparty/ffts/ffts-master/configure.ac vendored Executable file
View File

@@ -0,0 +1,137 @@
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.68])
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([stdint.h stdlib.h string.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

780
3rdparty/ffts/ffts-master/depcomp vendored Executable file
View File

@@ -0,0 +1,780 @@
#! /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:

10
3rdparty/ffts/ffts-master/ffts.pc.in vendored Executable file
View File

@@ -0,0 +1,10 @@
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

72
3rdparty/ffts/ffts-master/include/ffts.h vendored Executable file
View File

@@ -0,0 +1,72 @@
/*
This file is part of FFTS.
Copyright (c) 2012, Anthony M. Blake
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__
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <stdint.h>
#include <stddef.h>
#ifdef __cplusplus
extern "C"
{
#endif /* __cplusplus */
#define POSITIVE_SIGN 1
#define NEGATIVE_SIGN -1
struct _ffts_plan_t;
typedef struct _ffts_plan_t ffts_plan_t;
ffts_plan_t *ffts_init_1d(size_t N, int sign);
ffts_plan_t *ffts_init_2d(size_t N1, size_t N2, int sign);
ffts_plan_t *ffts_init_nd(int rank, size_t *Ns, int sign);
// For real transforms, sign == -1 implies a real-to-complex forwards tranform,
// and sign == 1 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_plan_t *ffts_init_1d_real(size_t N, int sign);
ffts_plan_t *ffts_init_2d_real(size_t N1, size_t N2, int sign);
ffts_plan_t *ffts_init_nd_real(int rank, size_t *Ns, int sign);
void ffts_execute(ffts_plan_t * , const void *input, void *output);
void ffts_free(ffts_plan_t *);
#ifdef __cplusplus
} /* extern "C" */
#endif /* __cplusplus */
#endif
// vim: set autoindent noexpandtab tabstop=3 shiftwidth=3:

527
3rdparty/ffts/ffts-master/install-sh vendored Executable file
View File

@@ -0,0 +1,527 @@
#!/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:

33
3rdparty/ffts/ffts-master/java/Makefile.am vendored Executable file
View File

@@ -0,0 +1,33 @@
# 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

741
3rdparty/ffts/ffts-master/java/Makefile.in vendored Executable file
View File

@@ -0,0 +1,741 @@
# 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:

View File

@@ -0,0 +1,9 @@
<?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>

View File

@@ -0,0 +1,40 @@
<?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>

View File

@@ -0,0 +1,4 @@
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

View File

@@ -0,0 +1,2 @@
eclipse.preferences.version=1
org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false

View File

@@ -0,0 +1,7 @@
<?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>

View File

@@ -0,0 +1,18 @@
# 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.

View File

@@ -0,0 +1,92 @@
<?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>

View File

@@ -0,0 +1,25 @@
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)

View File

@@ -0,0 +1,2 @@
# requires NEON atm
APP_ABI := armeabi-v7a

View File

@@ -0,0 +1,20 @@
# 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 *;
#}

View File

@@ -0,0 +1,15 @@
# 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

237
3rdparty/ffts/ffts-master/java/jni/ffts_jni.c vendored Executable file
View File

@@ -0,0 +1,237 @@
/*
* 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:

View File

@@ -0,0 +1,203 @@
/*
* 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);
}

9656
3rdparty/ffts/ffts-master/ltmain.sh vendored Executable file

File diff suppressed because it is too large Load Diff

144
3rdparty/ffts/ffts-master/m4/ax_check_class.m4 vendored Executable file
View File

@@ -0,0 +1,144 @@
# ===========================================================================
# 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)
])

View File

@@ -0,0 +1,60 @@
# ===========================================================================
# 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
])

View File

@@ -0,0 +1,80 @@
# ===========================================================================
# 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])
])

View File

@@ -0,0 +1,101 @@
# ===========================================================================
# 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
])

View File

@@ -0,0 +1,85 @@
# ===========================================================================
# 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])

View File

@@ -0,0 +1,48 @@
# ===========================================================================
# 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
])

View File

@@ -0,0 +1,120 @@
# ===========================================================================
# 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

52
3rdparty/ffts/ffts-master/m4/ax_prog_jar.m4 vendored Executable file
View File

@@ -0,0 +1,52 @@
# ===========================================================================
# 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
])

115
3rdparty/ffts/ffts-master/m4/ax_prog_java.m4 vendored Executable file
View File

@@ -0,0 +1,115 @@
# ===========================================================================
# 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
])

View File

@@ -0,0 +1,104 @@
# ===========================================================================
# 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

View File

@@ -0,0 +1,134 @@
# ===========================================================================
# 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
]
)

79
3rdparty/ffts/ffts-master/m4/ax_prog_javac.m4 vendored Executable file
View File

@@ -0,0 +1,79 @@
# ===========================================================================
# 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
])

View File

@@ -0,0 +1,72 @@
# ===========================================================================
# 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
])

View File

@@ -0,0 +1,52 @@
# ===========================================================================
# 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
])

43
3rdparty/ffts/ffts-master/m4/ax_prog_javah.m4 vendored Executable file
View File

@@ -0,0 +1,43 @@
# ===========================================================================
# 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])

View File

@@ -0,0 +1,55 @@
# ===========================================================================
# 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*])

View File

@@ -0,0 +1,56 @@
# ===========================================================================
# 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*])

330
3rdparty/ffts/ffts-master/missing vendored Executable file
View File

@@ -0,0 +1,330 @@
#! /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:

34
3rdparty/ffts/ffts-master/src/Makefile.am vendored Executable file
View File

@@ -0,0 +1,34 @@
lib_LTLIBRARIES = libffts.la
libffts_la_SOURCES = ffts.c ffts_small.c ffts_nd.c ffts_real.c ffts_real_nd.c patterns.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
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 += sse.s
endif
endif
endif

730
3rdparty/ffts/ffts-master/src/Makefile.in vendored Executable file
View File

@@ -0,0 +1,730 @@
# 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:

732
3rdparty/ffts/ffts-master/src/codegen.c vendored Executable file
View File

@@ -0,0 +1,732 @@
/*
This file is part of FFTS -- The Fastest Fourier Transform in the South
Copyright (c) 2012, Anthony M. Blake <amb@anthonix.com>
Copyright (c) 2012, The University of Waikato
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 "codegen.h"
#include "macros.h"
#include "ffts.h"
#ifdef __APPLE__
#include <libkern/OSCacheControl.h>
#endif
#include <sys/types.h>
#include <sys/mman.h>
#ifdef HAVE_NEON
#include "codegen_arm.h"
#include "neon.h"
#elif HAVE_VFP
#include "codegen_arm.h"
#include "vfp.h"
#else
#include "codegen_sse.h"
#include "macros-sse.h"
#endif
#ifdef __ANDROID__
#include <unistd.h>
#endif
int tree_count(int N, int leafN, int offset) {
if(N <= leafN) return 0;
int count = 0;
count += tree_count(N/4, leafN, offset);
count += tree_count(N/8, leafN, offset + N/4);
count += tree_count(N/8, leafN, offset + N/4 + N/8);
count += tree_count(N/4, leafN, offset + N/2);
count += tree_count(N/4, leafN, offset + 3*N/4);
return 1 + count;
}
void elaborate_tree(size_t **p, int N, int leafN, int offset) {
if(N <= leafN) return;
elaborate_tree(p, N/4, leafN, offset);
elaborate_tree(p, N/8, leafN, offset + N/4);
elaborate_tree(p, N/8, leafN, offset + N/4 + N/8);
elaborate_tree(p, N/4, leafN, offset + N/2);
elaborate_tree(p, N/4, leafN, offset + 3*N/4);
(*p)[0] = N;
(*p)[1] = offset*2;
(*p)+=2;
}
uint32_t LUT_offset(size_t N, size_t leafN) {
int i;
size_t p_lut_size = 0;
size_t lut_size = 0;
int hardcoded = 0;
size_t n_luts = __builtin_ctzl(N/leafN);
int n = leafN*2;
//if(N <= 32) { n_luts = __builtin_ctzl(N/4); hardcoded = 1; }
for(i=0;i<n_luts-1;i++) {
p_lut_size = lut_size;
if(!i || hardcoded) {
#ifdef __arm__
if(N <= 32) lut_size += n/4 * 2 * sizeof(cdata_t);
else lut_size += n/4 * sizeof(cdata_t);
#else
lut_size += n/4 * 2 * sizeof(cdata_t);
#endif
// n *= 2;
} else {
#ifdef __arm__
lut_size += n/8 * 3 * sizeof(cdata_t);
#else
lut_size += n/8 * 3 * 2 * sizeof(cdata_t);
#endif
}
n *= 2;
}
return lut_size;
}
#ifdef __arm__
typedef uint32_t insns_t;
#else
typedef uint8_t insns_t;
#endif
#define P(x) (*(*p)++ = x)
void insert_nops(uint8_t **p, uint32_t count) {
switch(count) {
case 0: break;
case 2: P(0x66);
case 1: P(0x90); break;
case 3: P(0x0F); P(0x1F); P(0x00); break;
case 4: P(0x0F); P(0x1F); P(0x40); P(0x00); break;
case 5: P(0x0F); P(0x1F); P(0x44); P(0x00); P(0x00); break;
case 6: P(0x66); P(0x0F); P(0x1F); P(0x44); P(0x00); P(0x00); break;
case 7: P(0x0F); P(0x1F); P(0x80); P(0x00); P(0x00); P(0x00); P(0x00); break;
case 8: P(0x0F); P(0x1F); P(0x84); P(0x00); P(0x00); P(0x00); P(0x00); P(0x00); break;
case 9: P(0x66); P(0x0F); P(0x1F); P(0x84); P(0x00); P(0x00); P(0x00); P(0x00); P(0x00); break;
default:
P(0x66); P(0x0F); P(0x1F); P(0x84); P(0x00); P(0x00); P(0x00); P(0x00); P(0x00);
insert_nops(p, count-9);
break;
}
}
void align_mem16(uint8_t **p, uint32_t offset) {
#ifdef __x86_64__
int r = (16 - (offset & 0xf)) - ((uint32_t)(*p) & 0xf);
r = (16 + r) & 0xf;
insert_nops(p, r);
#endif
}
void ffts_generate_func_code(ffts_plan_t *p, size_t N, size_t leafN, int sign) {
int count = tree_count(N, leafN, 0) + 1;
size_t *ps = malloc(count * 2 * sizeof(size_t));
size_t *pps = ps;
#ifdef __x86_64__
if(sign < 0) p->constants = sse_constants;
else p->constants = sse_constants_inv;
#endif
elaborate_tree(&pps, N, leafN, 0);
pps[0] = 0;
pps[1] = 0;
pps = ps;
#ifdef __arm__
if(N < 8192) p->transform_size = 8192;
else p->transform_size = N;
#else
if(N < 2048) p->transform_size = 16384;
else p->transform_size = 16384 + 2*N/8 * __builtin_ctzl(N);
#endif
#ifdef __APPLE__
p->transform_base = mmap(NULL, p->transform_size, PROT_WRITE | PROT_READ, MAP_ANON | MAP_SHARED, -1, 0);
#else
#define MAP_ANONYMOUS 0x20
p->transform_base = mmap(NULL, p->transform_size, PROT_WRITE | PROT_READ, MAP_ANONYMOUS | MAP_SHARED, -1, 0);
#endif
/*
if(p->transform_base == MAP_FAILED) {
fprintf(stderr, "MAP FAILED\n");
exit(1);
}*/
insns_t *func = p->transform_base;//valloc(8192);
insns_t *fp = func;
//fprintf(stderr, "Allocating %d bytes \n", p->transform_size);
//fprintf(stderr, "Base address = %016p\n", func);
if(!func) {
fprintf(stderr, "NOMEM\n");
exit(1);
}
insns_t *x_8_addr = fp;
#ifdef __arm__
#ifdef HAVE_NEON
memcpy(fp, neon_x8, neon_x8_t - neon_x8);
/*
* Changes adds to subtracts and vice versa to allow the computation
* of both the IFFT and FFT
*/
if(sign < 0) {
fp[31] ^= 0x00200000; fp[32] ^= 0x00200000; fp[33] ^= 0x00200000; fp[34] ^= 0x00200000;
fp[65] ^= 0x00200000; fp[66] ^= 0x00200000; fp[70] ^= 0x00200000; fp[74] ^= 0x00200000;
fp[97] ^= 0x00200000; fp[98] ^= 0x00200000; fp[102] ^= 0x00200000; fp[104] ^= 0x00200000;
}
fp += (neon_x8_t - neon_x8) / 4;
#else
memcpy(fp, vfp_x8, vfp_end - vfp_x8);
if(sign > 0) {
fp[65] ^= 0x00000040;
fp[66] ^= 0x00000040;
fp[68] ^= 0x00000040;
fp[70] ^= 0x00000040;
fp[103] ^= 0x00000040;
fp[104] ^= 0x00000040;
fp[105] ^= 0x00000040;
fp[108] ^= 0x00000040;
fp[113] ^= 0x00000040;
fp[114] ^= 0x00000040;
fp[117] ^= 0x00000040;
fp[118] ^= 0x00000040;
}
fp += (vfp_end - vfp_x8) / 4;
#endif
#else
align_mem16(&fp, 0);
x_8_addr = fp;
align_mem16(&fp, 5);
memcpy(fp, x8_soft, x8_hard - x8_soft);
fp += (x8_hard - x8_soft);
//fprintf(stderr, "X8 start address = %016p\n", x_8_addr);
#endif
//uint32_t *x_8_t_addr = fp;
//memcpy(fp, neon_x8_t, neon_end - neon_x8_t);
//fp += (neon_end - neon_x8_t) / 4;
insns_t *x_4_addr = fp;
#ifdef __arm__
#ifdef HAVE_NEON
memcpy(fp, neon_x4, neon_x8 - neon_x4);
if(sign < 0) {
fp[26] ^= 0x00200000; fp[28] ^= 0x00200000; fp[31] ^= 0x00200000; fp[32] ^= 0x00200000;
}
fp += (neon_x8 - neon_x4) / 4;
#else
memcpy(fp, vfp_x4, vfp_x8 - vfp_x4);
if(sign > 0) {
fp[36] ^= 0x00000040;
fp[38] ^= 0x00000040;
fp[43] ^= 0x00000040;
fp[44] ^= 0x00000040;
}
fp += (vfp_x8 - vfp_x4) / 4;
#endif
#else
align_mem16(&fp, 0);
x_4_addr = fp;
memcpy(fp, x4, x8_soft - x4);
fp += (x8_soft - x4);
#endif
insns_t *start = fp;
#ifdef __arm__
*fp = PUSH_LR(); fp++;
*fp = 0xed2d8b10; fp++;
ADDI(&fp, 3, 1, 0);
ADDI(&fp, 7, 1, N);
ADDI(&fp, 5, 1, 2*N);
ADDI(&fp, 10, 7, 2*N);
ADDI(&fp, 4, 5, 2*N);
ADDI(&fp, 8, 10, 2*N);
ADDI(&fp, 6, 4, 2*N);
ADDI(&fp, 9, 8, 2*N);
*fp = LDRI(12, 0, ((uint32_t)&p->offsets) - ((uint32_t)p)); fp++; // load offsets into r12
// *fp++ = LDRI(1, 0, 4); // load ws into r1
ADDI(&fp, 1, 0, 0);
ADDI(&fp, 0, 2, 0), // mov out into r0
#endif
#ifdef __arm__
*fp = LDRI(2, 1, ((uint32_t)&p->ee_ws) - ((uint32_t)p)); fp++;
#ifdef HAVE_NEON
MOVI(&fp, 11, p->i0);
#else
MOVI(&fp, 11, p->i0);
#endif
#else
align_mem16(&fp, 0);
start = fp;
*fp++ = 0x4c;
*fp++ = 0x8b;
*fp++ = 0x07;
uint32_t lp_cnt = p->i0 * 4;
MOVI(&fp, RCX, lp_cnt);
//LEA(&fp, R8, RDI, ((uint32_t)&p->offsets) - ((uint32_t)p));
#endif
//fp++;
#ifdef __arm__
#ifdef HAVE_NEON
memcpy(fp, neon_ee, neon_oo - neon_ee);
if(sign < 0) {
fp[33] ^= 0x00200000; fp[37] ^= 0x00200000; fp[38] ^= 0x00200000; fp[39] ^= 0x00200000;
fp[40] ^= 0x00200000; fp[41] ^= 0x00200000; fp[44] ^= 0x00200000; fp[45] ^= 0x00200000;
fp[46] ^= 0x00200000; fp[47] ^= 0x00200000; fp[48] ^= 0x00200000; fp[57] ^= 0x00200000;
}
fp += (neon_oo - neon_ee) / 4;
#else
memcpy(fp, vfp_e, vfp_o - vfp_e);
if(sign > 0) {
fp[64] ^= 0x00000040; fp[65] ^= 0x00000040; fp[68] ^= 0x00000040; fp[75] ^= 0x00000040;
fp[76] ^= 0x00000040; fp[79] ^= 0x00000040; fp[80] ^= 0x00000040; fp[83] ^= 0x00000040;
fp[84] ^= 0x00000040; fp[87] ^= 0x00000040; fp[91] ^= 0x00000040; fp[93] ^= 0x00000040;
}
fp += (vfp_o - vfp_e) / 4;
#endif
#else
//fprintf(stderr, "Body start address = %016p\n", start);
PUSH(&fp, RBP);
PUSH(&fp, RBX);
PUSH(&fp, R10);
PUSH(&fp, R11);
PUSH(&fp, R12);
PUSH(&fp, R13);
PUSH(&fp, R14);
PUSH(&fp, R15);
int i;
memcpy(fp, leaf_ee_init, leaf_ee - leaf_ee_init);
//fprintf(stderr, "Leaf ee init address = %016p\n", leaf_ee_init);
//fprintf(stderr, "Constants address = %016p\n", sse_constants);
//fprintf(stderr, "Constants address = %016p\n", p->constants);
//int32_t val = READ_IMM32(fp + 3);
//fprintf(stderr, "diff = 0x%x\n", ((uint32_t)&p->constants) - ((uint32_t)p));
//int64_t v2 = val + (int64_t)((void *)leaf_ee_init - (void *)fp );
//fprintf(stderr, "IMM = 0x%llx\n", v2);
//IMM32_NI(fp + 3, ((int64_t) READ_IMM32(fp + 3)) + ((void *)leaf_ee_init - (void *)fp ));
fp += (leaf_ee - leaf_ee_init);
//fprintf(stderr, "Leaf start address = %016p\n", fp);
align_mem16(&fp, 9);
memcpy(fp, leaf_ee, leaf_oo - leaf_ee);
uint32_t offsets[8] = {0, N, N/2, 3*N/2, N/4, 5*N/4, 7*N/4, 3*N/4};
uint32_t offsets_o[8] = {0, N, N/2, 3*N/2, 7*N/4, 3*N/4, N/4, 5*N/4};
uint32_t offsets_oe[8] = {7*N/4, 3*N/4, N/4, 5*N/4, 0, N, 3*N/2, N/2};
for(i=0;i<8;i++) IMM32_NI(fp + sse_leaf_ee_offsets[i], offsets[i]*4);
fp += (leaf_oo - leaf_ee);
if(__builtin_ctzl(N) & 1){
if(p->i1) {
lp_cnt += p->i1 * 4;
MOVI(&fp, RCX, lp_cnt);
align_mem16(&fp, 4);
memcpy(fp, leaf_oo, leaf_eo - leaf_oo);
for(i=0;i<8;i++) IMM32_NI(fp + sse_leaf_oo_offsets[i], offsets_o[i]*4);
fp += (leaf_eo - leaf_oo);
}
memcpy(fp, leaf_oe, leaf_end - leaf_oe);
lp_cnt += 4;
for(i=0;i<8;i++) IMM32_NI(fp + sse_leaf_oe_offsets[i], offsets_o[i]*4);
fp += (leaf_end - leaf_oe);
}else{
memcpy(fp, leaf_eo, leaf_oe - leaf_eo);
lp_cnt += 4;
for(i=0;i<8;i++) IMM32_NI(fp + sse_leaf_eo_offsets[i], offsets[i]*4);
fp += (leaf_oe - leaf_eo);
if(p->i1) {
lp_cnt += p->i1 * 4;
MOVI(&fp, RCX, lp_cnt);
align_mem16(&fp, 4);
memcpy(fp, leaf_oo, leaf_eo - leaf_oo);
for(i=0;i<8;i++) IMM32_NI(fp + sse_leaf_oo_offsets[i], offsets_o[i]*4);
fp += (leaf_eo - leaf_oo);
}
}
if(p->i1) {
lp_cnt += p->i1 * 4;
MOVI(&fp, RCX, lp_cnt);
align_mem16(&fp, 9);
memcpy(fp, leaf_ee, leaf_oo - leaf_ee);
for(i=0;i<8;i++) IMM32_NI(fp + sse_leaf_ee_offsets[i], offsets_oe[i]*4);
fp += (leaf_oo - leaf_ee);
}
//fprintf(stderr, "Body start address = %016p\n", fp);
//LEA(&fp, R8, RDI, ((uint32_t)&p->ws) - ((uint32_t)p));
memcpy(fp, x_init, x4 - x_init);
//IMM32_NI(fp + 3, ((int64_t)READ_IMM32(fp + 3)) + ((void *)x_init - (void *)fp ));
fp += (x4 - x_init);
int32_t pAddr = 0;
int32_t pN = 0;
int32_t pLUT = 0;
count = 2;
while(pps[0]) {
if(!pN) {
MOVI(&fp, RCX, pps[0] / 4);
}else{
if((pps[1]*4)-pAddr) ADDI(&fp, RDX, (pps[1] * 4)- pAddr);
if(pps[0] > leafN && pps[0] - pN) {
int diff = __builtin_ctzl(pps[0]) - __builtin_ctzl(pN);
*fp++ = 0xc1;
if(diff > 0) {
*fp++ = 0xe1;
*fp++ = (diff & 0xff);
}else{
*fp++ = 0xe9;
*fp++ = ((-diff) & 0xff);
}
}
}
if(p->ws_is[__builtin_ctzl(pps[0]/leafN)-1]*8 - pLUT)
ADDI(&fp, R8, p->ws_is[__builtin_ctzl(pps[0]/leafN)-1]*8 - pLUT);
if(pps[0] == 2*leafN) {
CALL(&fp, x_4_addr);
// }else if(!pps[2]){
// //uint32_t *x_8_t_addr = fp;
// memcpy(fp, neon_x8_t, neon_ee - neon_x8_t);
// fp += (neon_ee - neon_x8_t) / 4;
// //*fp++ = BL(fp+2, x_8_t_addr);
}else{
CALL(&fp, x_8_addr);
}
pAddr = pps[1] * 4;
if(pps[0] > leafN)
pN = pps[0];
pLUT = p->ws_is[__builtin_ctzl(pps[0]/leafN)-1]*8;//LUT_offset(pps[0], leafN);
// fprintf(stderr, "LUT offset for %d is %d\n", pN, pLUT);
count += 4;
pps += 2;
}
#endif
#ifdef __arm__
#ifdef HAVE_NEON
if(__builtin_ctzl(N) & 1){
ADDI(&fp, 2, 7, 0);
ADDI(&fp, 7, 9, 0);
ADDI(&fp, 9, 2, 0);
ADDI(&fp, 2, 8, 0);
ADDI(&fp, 8, 10, 0);
ADDI(&fp, 10, 2, 0);
if(p->i1) {
MOVI(&fp, 11, p->i1);
memcpy(fp, neon_oo, neon_eo - neon_oo);
if(sign < 0) {
fp[12] ^= 0x00200000; fp[13] ^= 0x00200000; fp[14] ^= 0x00200000; fp[15] ^= 0x00200000;
fp[27] ^= 0x00200000; fp[29] ^= 0x00200000; fp[30] ^= 0x00200000; fp[31] ^= 0x00200000;
fp[46] ^= 0x00200000; fp[47] ^= 0x00200000; fp[48] ^= 0x00200000; fp[57] ^= 0x00200000;
}
fp += (neon_eo - neon_oo) / 4;
}
*fp = LDRI(11, 1, ((uint32_t)&p->oe_ws) - ((uint32_t)p)); fp++;
memcpy(fp, neon_oe, neon_end - neon_oe);
if(sign < 0) {
fp[19] ^= 0x00200000; fp[20] ^= 0x00200000; fp[22] ^= 0x00200000; fp[23] ^= 0x00200000;
fp[37] ^= 0x00200000; fp[38] ^= 0x00200000; fp[40] ^= 0x00200000; fp[41] ^= 0x00200000;
fp[64] ^= 0x00200000; fp[65] ^= 0x00200000; fp[66] ^= 0x00200000; fp[67] ^= 0x00200000;
}
fp += (neon_end - neon_oe) / 4;
}else{
*fp = LDRI(11, 1, ((uint32_t)&p->eo_ws) - ((uint32_t)p)); fp++;
memcpy(fp, neon_eo, neon_oe - neon_eo);
if(sign < 0) {
fp[10] ^= 0x00200000; fp[11] ^= 0x00200000; fp[13] ^= 0x00200000; fp[14] ^= 0x00200000;
fp[31] ^= 0x00200000; fp[33] ^= 0x00200000; fp[34] ^= 0x00200000; fp[35] ^= 0x00200000;
fp[59] ^= 0x00200000; fp[60] ^= 0x00200000; fp[61] ^= 0x00200000; fp[62] ^= 0x00200000;
}
fp += (neon_oe - neon_eo) / 4;
ADDI(&fp, 2, 7, 0);
ADDI(&fp, 7, 9, 0);
ADDI(&fp, 9, 2, 0);
ADDI(&fp, 2, 8, 0);
ADDI(&fp, 8, 10, 0);
ADDI(&fp, 10, 2, 0);
if(p->i1) {
MOVI(&fp, 11, p->i1);
memcpy(fp, neon_oo, neon_eo - neon_oo);
if(sign < 0) {
fp[12] ^= 0x00200000; fp[13] ^= 0x00200000; fp[14] ^= 0x00200000; fp[15] ^= 0x00200000;
fp[27] ^= 0x00200000; fp[29] ^= 0x00200000; fp[30] ^= 0x00200000; fp[31] ^= 0x00200000;
fp[46] ^= 0x00200000; fp[47] ^= 0x00200000; fp[48] ^= 0x00200000; fp[57] ^= 0x00200000;
}
fp += (neon_eo - neon_oo) / 4;
}
}
if(p->i1) {
ADDI(&fp, 2, 3, 0);
ADDI(&fp, 3, 7, 0);
ADDI(&fp, 7, 2, 0);
ADDI(&fp, 2, 4, 0);
ADDI(&fp, 4, 8, 0);
ADDI(&fp, 8, 2, 0);
ADDI(&fp, 2, 5, 0);
ADDI(&fp, 5, 9, 0);
ADDI(&fp, 9, 2, 0);
ADDI(&fp, 2, 6, 0);
ADDI(&fp, 6, 10, 0);
ADDI(&fp, 10, 2, 0);
ADDI(&fp, 2, 9, 0);
ADDI(&fp, 9, 10, 0);
ADDI(&fp, 10, 2, 0);
*fp = LDRI(2, 1, ((uint32_t)&p->ee_ws) - ((uint32_t)p)); fp++;
MOVI(&fp, 11, p->i1);
memcpy(fp, neon_ee, neon_oo - neon_ee);
if(sign < 0) {
fp[33] ^= 0x00200000; fp[37] ^= 0x00200000; fp[38] ^= 0x00200000; fp[39] ^= 0x00200000;
fp[40] ^= 0x00200000; fp[41] ^= 0x00200000; fp[44] ^= 0x00200000; fp[45] ^= 0x00200000;
fp[46] ^= 0x00200000; fp[47] ^= 0x00200000; fp[48] ^= 0x00200000; fp[57] ^= 0x00200000;
}
fp += (neon_oo - neon_ee) / 4;
}
#else
ADDI(&fp, 2, 7, 0);
ADDI(&fp, 7, 9, 0);
ADDI(&fp, 9, 2, 0);
ADDI(&fp, 2, 8, 0);
ADDI(&fp, 8, 10, 0);
ADDI(&fp, 10, 2, 0);
MOVI(&fp, 11, (p->i1>0) ? p->i1 : 1);
memcpy(fp, vfp_o, vfp_x4 - vfp_o);
if(sign > 0) {
fp[22] ^= 0x00000040; fp[24] ^= 0x00000040; fp[25] ^= 0x00000040; fp[26] ^= 0x00000040;
fp[62] ^= 0x00000040; fp[64] ^= 0x00000040; fp[65] ^= 0x00000040; fp[66] ^= 0x00000040;
}
fp += (vfp_x4 - vfp_o) / 4;
ADDI(&fp, 2, 3, 0);
ADDI(&fp, 3, 7, 0);
ADDI(&fp, 7, 2, 0);
ADDI(&fp, 2, 4, 0);
ADDI(&fp, 4, 8, 0);
ADDI(&fp, 8, 2, 0);
ADDI(&fp, 2, 5, 0);
ADDI(&fp, 5, 9, 0);
ADDI(&fp, 9, 2, 0);
ADDI(&fp, 2, 6, 0);
ADDI(&fp, 6, 10, 0);
ADDI(&fp, 10, 2, 0);
ADDI(&fp, 2, 9, 0);
ADDI(&fp, 9, 10, 0);
ADDI(&fp, 10, 2, 0);
*fp = LDRI(2, 1, ((uint32_t)&p->ee_ws) - ((uint32_t)p)); fp++;
MOVI(&fp, 11, (p->i2>0) ? p->i2 : 1);
memcpy(fp, vfp_e, vfp_o - vfp_e);
if(sign > 0) {
fp[64] ^= 0x00000040; fp[65] ^= 0x00000040; fp[68] ^= 0x00000040; fp[75] ^= 0x00000040;
fp[76] ^= 0x00000040; fp[79] ^= 0x00000040; fp[80] ^= 0x00000040; fp[83] ^= 0x00000040;
fp[84] ^= 0x00000040; fp[87] ^= 0x00000040; fp[91] ^= 0x00000040; fp[93] ^= 0x00000040;
}
fp += (vfp_o - vfp_e) / 4;
#endif
*fp = LDRI(2, 1, ((uint32_t)&p->ws) - ((uint32_t)p)); fp++; // load offsets into r12
//ADDI(&fp, 2, 1, 0);
MOVI(&fp, 1, 0);
// args: r0 - out
// r1 - N
// r2 - ws
// ADDI(&fp, 3, 1, 0); // put N into r3 for counter
int32_t pAddr = 0;
int32_t pN = 0;
int32_t pLUT = 0;
count = 2;
while(pps[0]) {
// fprintf(stderr, "size %zu at %zu - diff %zu\n", pps[0], pps[1]*4, (pps[1]*4) - pAddr);
if(!pN) {
MOVI(&fp, 1, pps[0]);
}else{
if((pps[1]*4)-pAddr) ADDI(&fp, 0, 0, (pps[1] * 4)- pAddr);
if(pps[0] - pN) ADDI(&fp, 1, 1, pps[0] - pN);
}
if(p->ws_is[__builtin_ctzl(pps[0]/leafN)-1]*8 - pLUT)
ADDI(&fp, 2, 2, p->ws_is[__builtin_ctzl(pps[0]/leafN)-1]*8 - pLUT);
if(pps[0] == 2*leafN) {
*fp = BL(fp+2, x_4_addr); fp++;
}else if(!pps[2]){
//uint32_t *x_8_t_addr = fp;
#ifdef HAVE_NEON
memcpy(fp, neon_x8_t, neon_ee - neon_x8_t);
if(sign < 0) {
fp[31] ^= 0x00200000; fp[32] ^= 0x00200000; fp[33] ^= 0x00200000; fp[34] ^= 0x00200000;
fp[65] ^= 0x00200000; fp[66] ^= 0x00200000; fp[70] ^= 0x00200000; fp[74] ^= 0x00200000;
fp[97] ^= 0x00200000; fp[98] ^= 0x00200000; fp[102] ^= 0x00200000; fp[104] ^= 0x00200000;
}
fp += (neon_ee - neon_x8_t) / 4;
//*fp++ = BL(fp+2, x_8_t_addr);
#else
*fp = BL(fp+2, x_8_addr); fp++;
#endif
}else{
*fp = BL(fp+2, x_8_addr); fp++;
}
pAddr = pps[1] * 4;
pN = pps[0];
pLUT = p->ws_is[__builtin_ctzl(pps[0]/leafN)-1]*8;//LUT_offset(pps[0], leafN);
// fprintf(stderr, "LUT offset for %d is %d\n", pN, pLUT);
count += 4;
pps += 2;
}
*fp++ = 0xecbd8b10;
*fp++ = POP_LR(); count++;
#else
POP(&fp, R15);
POP(&fp, R14);
POP(&fp, R13);
POP(&fp, R12);
POP(&fp, R11);
POP(&fp, R10);
POP(&fp, RBX);
POP(&fp, RBP);
RET(&fp);
//uint8_t *pp = func;
//int counter = 0;
//do{
// printf("%02x ", *pp);
// if(counter++ % 16 == 15) printf("\n");
//} while(++pp < fp);
//printf("\n");
#endif
// *fp++ = B(14); count++;
//for(int i=0;i<(neon_x8 - neon_x4)/4;i++)
// fprintf(stderr, "%08x\n", x_4_addr[i]);
//fprintf(stderr, "\n");
//for(int i=0;i<count;i++)
free(ps);
if (mprotect(func, p->transform_size, PROT_READ | PROT_EXEC)) {
perror("Couldn't mprotect");
exit(1);
}
#ifdef __APPLE__
sys_icache_invalidate(func, p->transform_size);
#elif __ANDROID__
cacheflush((long)(func), (long)(func) + p->transform_size, 0);
#elif __linux__
#ifdef __GNUC__
__clear_cache((long)(func), (long)(func) + p->transform_size);
#endif
#endif
//fprintf(stderr, "size of transform %zu = %d\n", N, (fp-func)*4);
p->transform = (void *) (start);
}
// vim: set autoindent noexpandtab tabstop=3 shiftwidth=3:

50
3rdparty/ffts/ffts-master/src/codegen.h vendored Executable file
View File

@@ -0,0 +1,50 @@
/*
This file is part of FFTS -- The Fastest Fourier Transform in the South
Copyright (c) 2012, Anthony M. Blake <amb@anthonix.com>
Copyright (c) 2012, The University of Waikato
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 __CODEGEN_H__
#define __CODEGEN_H__
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/mman.h>
#include <string.h>
#include <limits.h> /* for PAGESIZE */
#include "ffts.h"
void ffts_generate_func_code(ffts_plan_t *, size_t N, size_t leafN, int sign);
#endif
// vim: set autoindent noexpandtab tabstop=3 shiftwidth=3:

102
3rdparty/ffts/ffts-master/src/codegen_arm.h vendored Executable file
View File

@@ -0,0 +1,102 @@
/*
This file is part of FFTS -- The Fastest Fourier Transform in the South
Copyright (c) 2012, Anthony M. Blake <amb@anthonix.com>
Copyright (c) 2012, The University of Waikato
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 __CODEGEN_ARM_H__
#define __CODEGEN_ARM_H__
uint32_t BL(void *pos, void *target) {
return 0xeb000000 | (((target - pos) / 4) & 0xffffff);
}
uint32_t B(uint8_t r) {
return 0xe12fff10 | r;
}
uint32_t MOV(uint8_t dst, uint8_t src) {
return 0xe1a00000 | (src & 0xf) | ((dst & 0xf) << 12);
}
void ADDI(uint32_t **p, uint8_t dst, uint8_t src, int32_t imm) {
int32_t oimm = imm;
if(imm < 0) {
imm = -imm;
uint32_t shamt = (__builtin_ctzl(imm)>23)?23:__builtin_ctzl(imm);
if(shamt & 1) shamt -= 1;
imm >>= shamt;
shamt = (32 - shamt)/2;
// if(imm > 255) fprintf(stderr, "imm>255: %d\n", oimm);
*(*p)++ = 0xe2400000 | ((src & 0xf) << 16) | ((dst & 0xf) << 12) | ((shamt & 0xf) << 8) | (imm & 0xff);
if(imm > 255) ADDI(p, dst, src, (oimm + ((imm & 0xff) << (32-shamt*2))));
}else{
uint32_t shamt = (__builtin_ctzl(imm)>23)?23:__builtin_ctzl(imm);
if(shamt & 1) shamt -= 1;
imm >>= shamt;
shamt = (32 - shamt)/2;
// if(imm > 255) fprintf(stderr, "imm>255: %d\n", oimm);
*(*p)++ = 0xe2800000 | ((src & 0xf) << 16) | ((dst & 0xf) << 12) | ((shamt & 0xf) << 8) | (imm & 0xff);
if(imm > 255) ADDI(p, dst, src, (oimm - ((imm & 0xff) << (32-shamt*2))));
}
}
uint32_t LDRI(uint8_t dst, uint8_t base, uint32_t offset) {
return 0xe5900000 | ((dst & 0xf) << 12)
| ((base & 0xf) << 16) | (offset & 0xfff) ;
}
void MOVI(uint32_t **p, uint8_t dst, uint32_t imm) {
uint32_t oimm = imm;
uint32_t shamt = (__builtin_ctzl(imm)>23)?23:__builtin_ctzl(imm);
if(shamt & 1) shamt -= 1;
imm >>= shamt;
shamt = (32 - shamt)/2;
*(*p)++ = 0xe3a00000 | ((dst & 0xf) << 12) | ((shamt & 0xf) << 8) | (imm & 0xff) ;
if(imm > 255) ADDI(p, dst, dst, (oimm - ((imm & 0xff) << (32-shamt*2))));
}
uint32_t PUSH_LR() { return 0xe92d4ff0; } //0xe92d4000; }
uint32_t POP_LR() { return 0xe8bd8ff0; } //0xe8bd8000; }
#endif
// vim: set autoindent noexpandtab tabstop=3 shiftwidth=3:

196
3rdparty/ffts/ffts-master/src/codegen_sse.h vendored Executable file
View File

@@ -0,0 +1,196 @@
/*
This file is part of FFTS -- The Fastest Fourier Transform in the South
Copyright (c) 2012, Anthony M. Blake <amb@anthonix.com>
Copyright (c) 2012, The University of Waikato
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 __CODEGEN_SSE_H__
#define __CODEGEN_SSE_H__
void neon_x4(float *, size_t, float *);
void neon_x8(float *, size_t, float *);
void neon_x8_t(float *, size_t, float *);
void leaf_ee_init();
void leaf_ee();
void leaf_oo();
void leaf_eo();
void leaf_oe();
void leaf_end();
void x_init();
void x4();
void x8_soft();
void x8_hard();
void sse_constants();
void sse_constants_inv();
// typedef uint8_t insns_t;
extern const uint32_t sse_leaf_ee_offsets[8];
extern const uint32_t sse_leaf_oo_offsets[8];
extern const uint32_t sse_leaf_eo_offsets[8];
extern const uint32_t sse_leaf_oe_offsets[8];
#define EAX 0
#define ECX 1
#define EDX 2
#define EBX 3
#define ESI 6
#define EDI 7
#define EBP 5
#define RAX 0
#define RCX 1
#define RDX 2
#define RBX 3
#define RSI 6
#define RDI 7
#define RBP 5
#define R8 8
#define R9 9
#define R10 10
#define R11 11
#define R12 12
#define R13 13
#define R14 14
#define R15 15
void IMM8(uint8_t **p, int32_t imm) {
*(*p)++ = (imm & 0xff);
}
void IMM16(uint8_t **p, int32_t imm) {
int i;
for(i=0;i<2;i++) {
*(*p)++ = (imm & (0xff << (i*8))) >> (i*8);
}
}
void IMM32(uint8_t **p, int32_t imm) {
int i;
for(i=0;i<4;i++) {
*(*p)++ = (imm & (0xff << (i*8))) >> (i*8);
}
}
void IMM32_NI(uint8_t *p, int32_t imm) {
int i;
for(i=0;i<4;i++) {
*(p+i) = (imm & (0xff << (i*8))) >> (i*8);
}
}
int32_t READ_IMM32(uint8_t *p) {
int32_t rval = 0;
int i;
for(i=0;i<4;i++) {
rval |= *(p+i) << (i*8);
}
return rval;
}
void MOVI(uint8_t **p, uint8_t dst, uint32_t imm) {
// if(imm < 65536) *(*p)++ = 0x66;
if(dst >= 8) *(*p)++ = 0x41;
//if(imm < 65536 && imm >= 256) *(*p)++ = 0x66;
//if(imm >= 256)
*(*p)++ = 0xb8 | (dst & 0x7);
// else *(*p)++ = 0xb0 | (dst & 0x7);
// if(imm < 256) IMM8(p, imm);
// else
//if(imm < 65536) IMM16(p, imm);
//else
IMM32(p, imm);
//if(dst < 8) {
// *(*p)++ = 0xb8 + dst;
//}else{
// *(*p)++ = 0x49;
// *(*p)++ = 0xc7;
// *(*p)++ = 0xc0 | (dst - 8);
//}
//IMM32(p, imm);
}
void ADDRMODE(uint8_t **p, uint8_t reg, uint8_t rm, int32_t disp) {
if(disp == 0) {
*(*p)++ = (rm & 7) | ((reg & 7) << 3);
}else if(disp <= 127 || disp >= -128) {
*(*p)++ = 0x40 | (rm & 7) | ((reg & 7) << 3);
IMM8(p, disp);
}else{
*(*p)++ = 0x80 | (rm & 7) | ((reg & 7) << 3);
IMM32(p, disp);
}
}
void LEA(uint8_t **p, uint8_t dst, uint8_t base, int32_t disp) {
*(*p)++ = 0x48 | ((base & 0x8) >> 3) | ((dst & 0x8) >> 1);
*(*p)++ = 0x8d;
ADDRMODE(p, dst, base, disp);
}
void RET(uint8_t **p) {
*(*p)++ = 0xc3;
}
void ADDI(uint8_t **p, uint8_t dst, int32_t imm) {
if(dst >= 8) *(*p)++ = 0x49;
else *(*p)++ = 0x48;
if(imm > 127 || imm <= -128) *(*p)++ = 0x81;
else *(*p)++ = 0x83;
*(*p)++ = 0xc0 | (dst & 0x7);
if(imm > 127 || imm <= -128) IMM32(p, imm);
else IMM8(p, imm);
}
void CALL(uint8_t **p, uint8_t *func) {
*(*p)++ = 0xe8;
IMM32(p, ((void *)func) - (void *)(*p) - 4);
}
void PUSH(uint8_t **p, uint8_t reg) {
if(reg >= 8) *(*p)++ = 0x41;
*(*p)++ = 0x50 | (reg & 7);
}
void POP(uint8_t **p, uint8_t reg) {
if(reg >= 8) *(*p)++ = 0x41;
*(*p)++ = 0x58 | (reg & 7);
}
#endif
// vim: set autoindent noexpandtab tabstop=3 shiftwidth=3:

419
3rdparty/ffts/ffts-master/src/ffts.c vendored Executable file
View File

@@ -0,0 +1,419 @@
/*
This file is part of FFTS -- The Fastest Fourier Transform in the South
Copyright (c) 2012, Anthony M. Blake <amb@anthonix.com>
Copyright (c) 2012, The University of Waikato
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 "ffts.h"
#include "macros.h"
//#include "mini_macros.h"
#include "patterns.h"
#include "ffts_small.h"
#ifdef DYNAMIC_DISABLED
#include "ffts_static.h"
#else
#include "codegen.h"
#include <sys/mman.h>
#endif
#include <errno.h>
#include <string.h>
#include <limits.h> /* for PAGESIZE */
#if __APPLE__
#include <libkern/OSCacheControl.h>
#else
#endif
void ffts_execute(ffts_plan_t *p, const void * in, void * out) {
//TODO: Define NEEDS_ALIGNED properly instead
#if defined(HAVE_SSE) || defined(HAVE_NEON)
if(((int)in % 16) != 0) {
LOG("ffts_execute: input buffer needs to be aligned to a 128bit boundary\n");
}
if(((int)out % 16) != 0) {
LOG("ffts_execute: output buffer needs to be aligned to a 128bit boundary\n");
}
#endif
p->transform(p, (const float *)in, (float *)out);
}
void ffts_free(ffts_plan_t *p) {
p->destroy(p);
}
void ffts_free_1d(ffts_plan_t *p) {
size_t i;
if(p->ws) {
FFTS_FREE(p->ws);
}
if(p->is) free(p->is);
if(p->ws_is) free(p->ws_is);
if(p->offsets) free(p->offsets);
//free(p->transforms);
if(p->transforms) free(p->transforms);
#ifndef DYNAMIC_DISABLED
if(p->transform_base) {
if (mprotect(p->transform_base, p->transform_size, PROT_READ | PROT_WRITE)) {
perror("Couldn't mprotect");
exit(errno);
}
munmap(p->transform_base, p->transform_size);
//free(p->transform_base);
}
#endif
free(p);
}
ffts_plan_t *ffts_init_1d(size_t N, int sign) {
if(N == 0 || (N & (N - 1)) != 0){
LOG("FFT size must be a power of two\n");
return NULL;
}
ffts_plan_t *p = malloc(sizeof(ffts_plan_t));
size_t leafN = 8;
size_t i;
#ifdef __arm__
//#ifdef HAVE_NEON
V MULI_SIGN;
if(sign < 0) MULI_SIGN = VLIT4(-0.0f, 0.0f, -0.0f, 0.0f);
else MULI_SIGN = VLIT4(0.0f, -0.0f, 0.0f, -0.0f);
//#endif
#else
V MULI_SIGN;
if(sign < 0) MULI_SIGN = VLIT4(-0.0f, 0.0f, -0.0f, 0.0f);
else MULI_SIGN = VLIT4(0.0f, -0.0f, 0.0f, -0.0f);
#endif
p->transform = NULL;
p->transform_base = NULL;
p->transforms = NULL;
p->is = NULL;
p->ws_is = NULL;
p->ws = NULL;
p->offsets = NULL;
p->destroy = ffts_free_1d;
if(N >= 32) {
ffts_init_offsets(p, N, leafN);
#ifdef __arm__
#ifdef HAVE_NEON
ffts_init_is(p, N, leafN, 1);
#else
ffts_init_is(p, N, leafN, 1);
#endif
#else
ffts_init_is(p, N, leafN, 1);
#endif
p->i0 = N/leafN/3+1;
p->i1 = N/leafN/3;
if((N/leafN) % 3 > 1) p->i1++;
p->i2 = N/leafN/3;
#ifdef __arm__
#ifdef HAVE_NEON
p->i0/=2;
p->i1/=2;
#endif
#else
p->i0/=2;
p->i1/=2;
#endif
}else{
p->transforms = malloc(2 * sizeof(transform_index_t));
p->transforms[0] = 0;
p->transforms[1] = 1;
if(N == 2) p->transform = &firstpass_2;
else if(N == 4 && sign == -1) p->transform = &firstpass_4_f;
else if(N == 4 && sign == 1) p->transform = &firstpass_4_b;
else if(N == 8 && sign == -1) p->transform = &firstpass_8_f;
else if(N == 8 && sign == 1) p->transform = &firstpass_8_b;
else if(N == 16 && sign == -1) p->transform = &firstpass_16_f;
else if(N == 16 && sign == 1) p->transform = &firstpass_16_b;
p->is = NULL;
p->offsets = NULL;
}
int hardcoded = 0;
/* LUTS */
size_t n_luts = __builtin_ctzl(N/leafN);
if(N < 32) { n_luts = __builtin_ctzl(N/4); hardcoded = 1; }
if(n_luts >= 32) n_luts = 0;
// fprintf(stderr, "n_luts = %zu\n", n_luts);
cdata_t *w;
int n = leafN*2;
if(hardcoded) n = 8;
size_t lut_size = 0;
for(i=0;i<n_luts;i++) {
if(!i || hardcoded) {
#ifdef __arm__
if(N <= 32) lut_size += n/4 * 2 * sizeof(cdata_t);
else lut_size += n/4 * sizeof(cdata_t);
#else
lut_size += n/4 * 2 * sizeof(cdata_t);
#endif
n *= 2;
} else {
#ifdef __arm__
lut_size += n/8 * 3 * sizeof(cdata_t);
#else
lut_size += n/8 * 3 * 2 * sizeof(cdata_t);
#endif
}
n *= 2;
}
// lut_size *= 16;
// fprintf(stderr, "lut size = %zu\n", lut_size);
if(n_luts) {
p->ws = FFTS_MALLOC(lut_size,32);
p->ws_is = malloc(n_luts * sizeof(size_t));
}else{
p->ws = NULL;
p->ws_is = NULL;
}
w = p->ws;
n = leafN*2;
if(hardcoded) n = 8;
#ifdef HAVE_NEON
V neg = (sign < 0) ? VLIT4(0.0f, 0.0f, 0.0f, 0.0f) : VLIT4(-0.0f, -0.0f, -0.0f, -0.0f);
#endif
for(i=0;i<n_luts;i++) {
p->ws_is[i] = w - (cdata_t *)p->ws;
//fprintf(stderr, "LUT[%zu] = %d @ %08x - %zu\n", i, n, w, p->ws_is[i]);
if(!i || hardcoded) {
cdata_t *w0 = FFTS_MALLOC(n/4 * sizeof(cdata_t), 32);
size_t j;
for(j=0;j<n/4;j++) {
w0[j][0] = W_re(n,j);
w0[j][1] = W_im(n,j);
}
float *fw0 = (float *)w0;
#ifdef __arm__
if(N < 32) {
//w = FFTS_MALLOC(n/4 * 2 * sizeof(cdata_t), 32);
float *fw = (float *)w;
V temp0, temp1, temp2;
for(j=0;j<n/4;j+=2) {
// #ifdef HAVE_NEON
temp0 = VLD(fw0 + j*2);
V re, im;
re = VDUPRE(temp0);
im = VDUPIM(temp0);
#ifdef HAVE_NEON
im = VXOR(im, MULI_SIGN);
//im = IMULI(sign>0, im);
#else
im = MULI(sign>0, im);
#endif
VST(fw + j*4 , re);
VST(fw + j*4+4, im);
// #endif
}
w += n/4 * 2;
}else{
//w = FFTS_MALLOC(n/4 * sizeof(cdata_t), 32);
float *fw = (float *)w;
#ifdef HAVE_NEON
VS temp0, temp1, temp2;
for(j=0;j<n/4;j+=4) {
temp0 = VLD2(fw0 + j*2);
temp0.val[1] = VXOR(temp0.val[1], neg);
STORESPR(fw + j*2, temp0);
}
#else
for(j=0;j<n/4;j+=1) {
fw[j*2] = fw0[j*2];
fw[j*2+1] = (sign < 0) ? fw0[j*2+1] : -fw0[j*2+1];
}
#endif
w += n/4;
}
#else
//w = FFTS_MALLOC(n/4 * 2 * sizeof(cdata_t), 32);
float *fw = (float *)w;
V temp0, temp1, temp2;
for(j=0;j<n/4;j+=2) {
temp0 = VLD(fw0 + j*2);
V re, im;
re = VDUPRE(temp0);
im = VDUPIM(temp0);
im = VXOR(im, MULI_SIGN);
VST(fw + j*4 , re);
VST(fw + j*4+4, im);
}
w += n/4 * 2;
#endif
FFTS_FREE(w0);
}else{
cdata_t *w0 = FFTS_MALLOC(n/8 * sizeof(cdata_t), 32);
cdata_t *w1 = FFTS_MALLOC(n/8 * sizeof(cdata_t), 32);
cdata_t *w2 = FFTS_MALLOC(n/8 * sizeof(cdata_t), 32);
size_t j;
for(j=0;j<n/8;j++) {
w0[j][0] = W_re(n,j*2);
w0[j][1] = W_im(n,j*2);
w1[j][0] = W_re(n,j);
w1[j][1] = W_im(n,j);
w2[j][0] = W_re(n,j + (n/8));
w2[j][1] = W_im(n,j + (n/8));
}
float *fw0 = (float *)w0;
float *fw1 = (float *)w1;
float *fw2 = (float *)w2;
#ifdef __arm__
//w = FFTS_MALLOC(n/8 * 3 * sizeof(cdata_t), 32);
float *fw = (float *)w;
#ifdef HAVE_NEON
VS temp0, temp1, temp2;
for(j=0;j<n/8;j+=4) {
temp0 = VLD2(fw0 + j*2);
temp0.val[1] = VXOR(temp0.val[1], neg);
STORESPR(fw + j*2*3, temp0);
temp1 = VLD2(fw1 + j*2);
temp1.val[1] = VXOR(temp1.val[1], neg);
STORESPR(fw + j*2*3 + 8, temp1);
temp2 = VLD2(fw2 + j*2);
temp2.val[1] = VXOR(temp2.val[1], neg);
STORESPR(fw + j*2*3 + 16, temp2);
}
#else
for(j=0;j<n/8;j+=1) {
fw[j*6] = fw0[j*2];
fw[j*6+1] = (sign < 0) ? fw0[j*2+1] : -fw0[j*2+1];
fw[j*6+2] = fw1[j*2+0];
fw[j*6+3] = (sign < 0) ? fw1[j*2+1] : -fw1[j*2+1];
fw[j*6+4] = fw2[j*2+0];
fw[j*6+5] = (sign < 0) ? fw2[j*2+1] : -fw2[j*2+1];
}
#endif
w += n/8 * 3;
#else
//w = FFTS_MALLOC(n/8 * 3 * 2 * sizeof(cdata_t), 32);
float *fw = (float *)w;
V temp0, temp1, temp2, re, im;
for(j=0;j<n/8;j+=2) {
temp0 = VLD(fw0 + j*2);
re = VDUPRE(temp0);
im = VDUPIM(temp0);
im = VXOR(im, MULI_SIGN);
VST(fw + j*2*6 , re);
VST(fw + j*2*6+4, im);
temp1 = VLD(fw1 + j*2);
re = VDUPRE(temp1);
im = VDUPIM(temp1);
im = VXOR(im, MULI_SIGN);
VST(fw + j*2*6+8 , re);
VST(fw + j*2*6+12, im);
temp2 = VLD(fw2 + j*2);
re = VDUPRE(temp2);
im = VDUPIM(temp2);
im = VXOR(im, MULI_SIGN);
VST(fw + j*2*6+16, re);
VST(fw + j*2*6+20, im);
}
w += n/8 * 3 * 2;
#endif
FFTS_FREE(w0);
FFTS_FREE(w1);
FFTS_FREE(w2);
}
///p->ws[i] = w;
n *= 2;
}
float *tmp = (float *)p->ws;
if(sign < 0) {
p->oe_ws = (void *)(&w_data[4]);
p->ee_ws = (void *)(w_data);
p->eo_ws = (void *)(&w_data[4]);
}else{
p->oe_ws = (void *)(w_data + 12);
p->ee_ws = (void *)(w_data + 8);
p->eo_ws = (void *)(w_data + 12);
}
p->N = N;
p->lastlut = w;
p->n_luts = n_luts;
#ifdef DYNAMIC_DISABLED
if(sign < 0) {
if(N >= 32) p->transform = ffts_static_transform_f;
}else{
if(N >= 32) p->transform = ffts_static_transform_i;
}
#else
if(N>=32) ffts_generate_func_code(p, N, leafN, sign);
#endif
return p;
}
// vim: set autoindent noexpandtab tabstop=3 shiftwidth=3:

192
3rdparty/ffts/ffts-master/src/ffts.h vendored Executable file
View File

@@ -0,0 +1,192 @@
/*
This file is part of FFTS -- The Fastest Fourier Transform in the South
Copyright (c) 2012, Anthony M. Blake <amb@anthonix.com>
Copyright (c) 2012, The University of Waikato
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 __CP_SSE_H__
#define __CP_SSE_H__
#include "config.h"
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <stddef.h>
#include <stdint.h>
//#include <stdalign.h>
//#include "codegen.h"
#include "types.h"
#ifdef __ANDROID__
#include <android/log.h>
#define LOG(s) __android_log_print(ANDROID_LOG_ERROR, "FFTS", s)
#else
#define LOG(s) fprintf(stderr, s)
#endif
#define PI 3.1415926535897932384626433832795028841971693993751058209
#if defined(_WIN32) || defined(_WIN64)
static const __declspec(align(64)) float w_data[16] =
#else
static const __attribute__ ((aligned(64))) float w_data[16] =
#endif
{
0.70710678118654757273731092936941, 0.70710678118654746171500846685376,
-0.70710678118654757273731092936941, -0.70710678118654746171500846685376,
1.0f, 0.70710678118654757273731092936941f,
-0.0f, -0.70710678118654746171500846685376,
0.70710678118654757273731092936941, 0.70710678118654746171500846685376,
0.70710678118654757273731092936941, 0.70710678118654746171500846685376,
1.0f, 0.70710678118654757273731092936941f,
0.0f, 0.70710678118654746171500846685376
};
__INLINE float W_re(float N, float k) { return cos(-2.0f * PI * k / N); }
__INLINE float W_im(float N, float k) { return sin(-2.0f * PI * k / N); }
typedef size_t transform_index_t;
//typedef void (*transform_func_t)(float *data, size_t N, float *LUT);
typedef void (*transform_func_t)(float *data, size_t N, float *LUT);
typedef struct _ffts_plan_t ffts_plan_t;
/**
* Contains all the Information need to perform FFT
*
*
* DO NOT CHANGE THE ORDER OF MEMBERS
* ASSEMBLY CODE USES HARD CODED OFFSETS TO REFERENCE
* SOME OF THESE VARIABES!!
*/
struct _ffts_plan_t {
/**
*
*/
ptrdiff_t *offsets;
#ifdef DYNAMIC_DISABLED
/**
* Twiddle factors
*/
void *ws;
/**
* ee - 2 size x size8
* oo - 2 x size4 in parallel
* oe -
*/
void *oe_ws, *eo_ws, *ee_ws;
#else
void __attribute__((aligned(32))) *ws;
void __attribute__((aligned(32))) *oe_ws, *eo_ws, *ee_ws;
#endif
/**
* Pointer into an array of precomputed indexes for the input data array
*/
ptrdiff_t *is;
/**
* Twiddle Factor Indexes
*/
size_t *ws_is;
/**
* Size of the loops for the base cases
*/
size_t i0, i1, n_luts;
/**
* Size fo the Transform
*/
size_t N;
void *lastlut;
/**
* Used in multidimensional Code ??
*/
transform_index_t *transforms;
//transform_func_t transform;
/**
* Pointer to the dynamically generated function
* that will execute the FFT
*/
void (*transform)(ffts_plan_t * , const void * , void * );
/**
* Pointer to the base memory address of
* of the transform function
*/
void *transform_base;
/**
* Size of the memory block contain the
* generated code
*/
size_t transform_size;
/**
* Points to the cosnant variables used by
* the Assembly Code
*/
void *constants;
// multi-dimensional stuff:
struct _ffts_plan_t **plans;
int rank;
size_t *Ns, *Ms;
void *buf;
void *transpose_buf;
/**
* Pointer to the destroy function
* to clean up the plan after use
* (differs for real and multi dimension transforms
*/
void (*destroy)(ffts_plan_t *);
/**
* Coefficiants for the real valued transforms
*/
float *A, *B;
size_t i2;
};
void ffts_free(ffts_plan_t *);
ffts_plan_t *ffts_init_1d(size_t N, int sign);
void ffts_execute(ffts_plan_t *, const void *, void *);
#endif
// vim: set autoindent noexpandtab tabstop=3 shiftwidth=3:

318
3rdparty/ffts/ffts-master/src/ffts_nd.c vendored Executable file
View File

@@ -0,0 +1,318 @@
/*
This file is part of FFTS -- The Fastest Fourier Transform in the South
Copyright (c) 2012, Anthony M. Blake <amb@anthonix.com>
Copyright (c) 2012, The University of Waikato
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 "ffts_nd.h"
#if defined(_WIN32) || defined(_WIN64)
#include "emmintrin.h"
#endif
#ifdef HAVE_NEON
#include "neon.h"
#endif
void ffts_free_nd(ffts_plan_t *p) {
int i;
for(i=0;i<p->rank;i++) {
ffts_plan_t *x = p->plans[i];
int k;
for(k=0;k<i;k++) {
if(p->Ms[i] == p->Ms[k]) x = NULL;
}
if(x) ffts_free(x);
}
free(p->Ns);
free(p->Ms);
free(p->plans);
free(p->buf);
free(p->transpose_buf);
free(p);
}
#define TSIZE 8
#include <string.h>
void ffts_transpose(uint64_t *in, uint64_t *out, int w, int h, uint64_t *buf) {
#ifdef HAVE_NEON
size_t i,j,k;
int linebytes = w*8;
for(j=0;j<h;j+=8) {
for(i=0;i<w;i+=8) {
neon_transpose_to_buf(in + j*w + i, buf, w);
uint64_t *p = out + i*h + j;
uint64_t *pbuf = buf;
uint64_t *ptemp;
#if defined(__aarch64__) || defined(__arm64__)
// This particular function comes out nicely using arm64 intrinsics; no need to deal with inline asm
{
uint64x2_t q8,q9,q10,q11,q12,q13,q14,q15;
int x;
for (x=0; x<4; x++)
{
ptemp = p;
p += w;
q8 = vld1q_u64(&pbuf[0]);
q9 = vld1q_u64(&pbuf[2]);
q10 = vld1q_u64(&pbuf[4]);
q11 = vld1q_u64(&pbuf[6]);
q12 = vld1q_u64(&pbuf[8]);
q13 = vld1q_u64(&pbuf[10]);
q14 = vld1q_u64(&pbuf[12]);
q15 = vld1q_u64(&pbuf[14]);
pbuf += 16;
vst1q_u64(&ptemp[0], q8);
vst1q_u64(&ptemp[2], q9);
vst1q_u64(&ptemp[4], q10);
vst1q_u64(&ptemp[6], q11);
ptemp = p;
p += w;
vst1q_u64(&ptemp[0], q12);
vst1q_u64(&ptemp[2], q13);
vst1q_u64(&ptemp[4], q14);
vst1q_u64(&ptemp[6], q15);
} // for x
} // aarch64
#else
__asm__ __volatile__(
"mov %[ptemp], %[p]\n\t"
"add %[p], %[p], %[w], lsl #3\n\t"
"vld1.32 {q8,q9}, [%[pbuf], :128]!\n\t"
"vld1.32 {q10,q11}, [%[pbuf], :128]!\n\t"
"vld1.32 {q12,q13}, [%[pbuf], :128]!\n\t"
"vld1.32 {q14,q15}, [%[pbuf], :128]!\n\t"
"vst1.32 {q8,q9}, [%[ptemp], :128]!\n\t"
"vst1.32 {q10,q11}, [%[ptemp], :128]!\n\t"
"mov %[ptemp], %[p]\n\t"
"add %[p], %[p], %[w], lsl #3\n\t"
"vst1.32 {q12,q13}, [%[ptemp], :128]!\n\t"
"vst1.32 {q14,q15}, [%[ptemp], :128]!\n\t"
"mov %[ptemp], %[p]\n\t"
"add %[p], %[p], %[w], lsl #3\n\t"
"vld1.32 {q8,q9}, [%[pbuf], :128]!\n\t"
"vld1.32 {q10,q11}, [%[pbuf], :128]!\n\t"
"vld1.32 {q12,q13}, [%[pbuf], :128]!\n\t"
"vld1.32 {q14,q15}, [%[pbuf], :128]!\n\t"
"vst1.32 {q8,q9}, [%[ptemp], :128]!\n\t"
"vst1.32 {q10,q11}, [%[ptemp], :128]!\n\t"
"mov %[ptemp], %[p]\n\t"
"add %[p], %[p], %[w], lsl #3\n\t"
"vst1.32 {q12,q13}, [%[ptemp], :128]!\n\t"
"vst1.32 {q14,q15}, [%[ptemp], :128]!\n\t"
"mov %[ptemp], %[p]\n\t"
"add %[p], %[p], %[w], lsl #3\n\t"
"vld1.32 {q8,q9}, [%[pbuf], :128]!\n\t"
"vld1.32 {q10,q11}, [%[pbuf], :128]!\n\t"
"vld1.32 {q12,q13}, [%[pbuf], :128]!\n\t"
"vld1.32 {q14,q15}, [%[pbuf], :128]!\n\t"
"vst1.32 {q8,q9}, [%[ptemp], :128]!\n\t"
"vst1.32 {q10,q11}, [%[ptemp], :128]!\n\t"
"mov %[ptemp], %[p]\n\t"
"add %[p], %[p], %[w], lsl #3\n\t"
"vst1.32 {q12,q13}, [%[ptemp], :128]!\n\t"
"vst1.32 {q14,q15}, [%[ptemp], :128]!\n\t"
"mov %[ptemp], %[p]\n\t"
"add %[p], %[p], %[w], lsl #3\n\t"
"vld1.32 {q8,q9}, [%[pbuf], :128]!\n\t"
"vld1.32 {q10,q11}, [%[pbuf], :128]!\n\t"
"vld1.32 {q12,q13}, [%[pbuf], :128]!\n\t"
"vld1.32 {q14,q15}, [%[pbuf], :128]!\n\t"
"vst1.32 {q8,q9}, [%[ptemp], :128]!\n\t"
"vst1.32 {q10,q11}, [%[ptemp], :128]!\n\t"
"mov %[ptemp], %[p]\n\t"
"vst1.32 {q12,q13}, [%[ptemp], :128]!\n\t"
"vst1.32 {q14,q15}, [%[ptemp], :128]!\n\t"
: [p] "+r" (p), [pbuf] "+r" (pbuf), [ptemp] "+r" (ptemp)
: [w] "r" (w)
: "memory", "q8", "q9", "q10", "q11"
);
#endif // 32 vs 64-bit version
// out[i*h + j] = in[j*w + i];
}
}
#else
#ifdef HAVE_SSE
__ALIGN64 uint64_t tmp[TSIZE*TSIZE];
int tx, ty;
int x, y;
int tw = w / TSIZE;
int th = h / TSIZE;
for (ty=0;ty<th;ty++) {
for (tx=0;tx<tw;tx++) {
uint64_t *ip0 = in + w*TSIZE*ty + tx * TSIZE;
uint64_t *op0 = tmp;//out + h*TSIZE*tx + ty*TSIZE;
// Copy/transpose to tmp
for (y=0;y<TSIZE;y+=2) {
//for (x=0;x<TSIZE;x+=2) {
//op[x*TSIZE] = ip[x];
__m128d q0 = _mm_load_pd((double *)(ip0 + 0*w));
__m128d q1 = _mm_load_pd((double *)(ip0 + 1*w));
__m128d q2 = _mm_load_pd((double *)(ip0 + 2*w));
__m128d q3 = _mm_load_pd((double *)(ip0 + 3*w));
__m128d q4 = _mm_load_pd((double *)(ip0 + 4*w));
__m128d q5 = _mm_load_pd((double *)(ip0 + 5*w));
__m128d q6 = _mm_load_pd((double *)(ip0 + 6*w));
__m128d q7 = _mm_load_pd((double *)(ip0 + 7*w));
ip0 += 2;
__m128d t0 = _mm_shuffle_pd(q0, q1, _MM_SHUFFLE2(0, 0));
__m128d t1 = _mm_shuffle_pd(q0, q1, _MM_SHUFFLE2(1, 1));
__m128d t2 = _mm_shuffle_pd(q2, q3, _MM_SHUFFLE2(0, 0));
__m128d t3 = _mm_shuffle_pd(q2, q3, _MM_SHUFFLE2(1, 1));
__m128d t4 = _mm_shuffle_pd(q4, q5, _MM_SHUFFLE2(0, 0));
__m128d t5 = _mm_shuffle_pd(q4, q5, _MM_SHUFFLE2(1, 1));
__m128d t6 = _mm_shuffle_pd(q6, q7, _MM_SHUFFLE2(0, 0));
__m128d t7 = _mm_shuffle_pd(q6, q7, _MM_SHUFFLE2(1, 1));
//_mm_store_pd((double *)(op0 + y*h + x), t0);
//_mm_store_pd((double *)(op0 + y*h + x + h), t1);
_mm_store_pd((double *)(op0 + 0), t0);
_mm_store_pd((double *)(op0 + 0 + TSIZE), t1);
_mm_store_pd((double *)(op0 + 2 ), t2);
_mm_store_pd((double *)(op0 + 2 + TSIZE), t3);
_mm_store_pd((double *)(op0 + 4 ), t4);
_mm_store_pd((double *)(op0 + 4 + TSIZE), t5);
_mm_store_pd((double *)(op0 + 6 ), t6);
_mm_store_pd((double *)(op0 + 6 + TSIZE), t7);
//}
op0 += 2*TSIZE;
}
op0 = out + h*tx*TSIZE + ty*TSIZE;
ip0 = tmp;
for (y=0;y<TSIZE;y+=1) {
// memcpy(op0, ip0, TSIZE * sizeof(*ip0));
__m128d q0 = _mm_load_pd((double *)(ip0 + 0));
__m128d q1 = _mm_load_pd((double *)(ip0 + 2));
__m128d q2 = _mm_load_pd((double *)(ip0 + 4));
__m128d q3 = _mm_load_pd((double *)(ip0 + 6));
_mm_store_pd((double *)(op0 + 0), q0);
_mm_store_pd((double *)(op0 + 2), q1);
_mm_store_pd((double *)(op0 + 4), q2);
_mm_store_pd((double *)(op0 + 6), q3);
op0 += h;
ip0 += TSIZE;
}
}
}
/*
size_t i,j;
for(i=0;i<w;i+=2) {
for(j=0;j<h;j+=2) {
// out[i*h + j] = in[j*w + i];
__m128d q0 = _mm_load_pd((double *)(in + j*w + i));
__m128d q1 = _mm_load_pd((double *)(in + j*w + i + w));
__m128d t0 = _mm_shuffle_pd(q0, q1, _MM_SHUFFLE2(0, 0));
__m128d t1 = _mm_shuffle_pd(q0, q1, _MM_SHUFFLE2(1, 1));
_mm_store_pd((double *)(out + i*h + j), t0);
_mm_store_pd((double *)(out + i*h + j + h), t1);
}
}
*/
#endif
#endif
}
void ffts_execute_nd(ffts_plan_t *p, const void * in, void * out) {
uint64_t *din = (uint64_t *)in;
uint64_t *buf = p->buf;
uint64_t *dout = (uint64_t *)out;
size_t i,j;
for(i=0;i<p->Ns[0];i++) {
p->plans[0]->transform(p->plans[0], din + (i * p->Ms[0]), buf + (i * p->Ms[0]));
}
ffts_transpose(buf, dout, p->Ms[0], p->Ns[0], p->transpose_buf);
for(i=1;i<p->rank;i++) {
for(j=0;j<p->Ns[i];j++) {
p->plans[i]->transform(p->plans[i], dout + (j * p->Ms[i]), buf + (j * p->Ms[i]));
}
ffts_transpose(buf, dout, p->Ms[i], p->Ns[i], p->transpose_buf);
}
}
ffts_plan_t *ffts_init_nd(int rank, size_t *Ns, int sign) {
size_t vol = 1;
ffts_plan_t *p = malloc(sizeof(ffts_plan_t));
p->transform = &ffts_execute_nd;
p->destroy = &ffts_free_nd;
p->rank = rank;
p->Ns = malloc(sizeof(size_t) * rank);
p->Ms = malloc(sizeof(size_t) * rank);
p->plans = malloc(sizeof(ffts_plan_t **) * rank);
int i;
for(i=0;i<rank;i++) {
p->Ns[i] = Ns[i];
vol *= Ns[i];
}
p->buf = valloc(sizeof(float) * 2 * vol);
for(i=0;i<rank;i++) {
p->Ms[i] = vol / p->Ns[i];
p->plans[i] = NULL;
int k;
for(k=0;k<i;k++) {
if(p->Ms[k] == p->Ms[i])
p->plans[i] = p->plans[k];
}
if(!p->plans[i]) p->plans[i] = ffts_init_1d(p->Ms[i], sign);
}
p->transpose_buf = valloc(sizeof(float) * 2 * 8 * 8);
return p;
}
ffts_plan_t *ffts_init_2d(size_t N1, size_t N2, int sign) {
size_t Ns[2];
Ns[0] = N1;
Ns[1] = N2;
return ffts_init_nd(2, Ns, sign);
}
// vim: set autoindent noexpandtab tabstop=3 shiftwidth=3:

59
3rdparty/ffts/ffts-master/src/ffts_nd.h vendored Executable file
View File

@@ -0,0 +1,59 @@
/*
This file is part of FFTS -- The Fastest Fourier Transform in the South
Copyright (c) 2012, Anthony M. Blake <amb@anthonix.com>
Copyright (c) 2012, The University of Waikato
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_ND_H__
#define __FFTS_ND_H__
#include <stdint.h>
#include <stddef.h>
#include <stdio.h>
#include "ffts.h"
#ifdef HAVE_NEON
#include <arm_neon.h>
#endif
#ifdef HAVE_SSE
#include <xmmintrin.h>
#endif
void ffts_free_nd(ffts_plan_t *p);
void ffts_transpose(uint64_t *in, uint64_t *out, int w, int h, uint64_t *buf);
void ffts_execute_nd(ffts_plan_t *p, const void * in, void * out);
ffts_plan_t *ffts_init_nd(int rank, size_t *Ns, int sign);
ffts_plan_t *ffts_init_2d(size_t N1, size_t N2, int sign);
#endif
// vim: set autoindent noexpandtab tabstop=3 shiftwidth=3:

227
3rdparty/ffts/ffts-master/src/ffts_real.c vendored Executable file
View File

@@ -0,0 +1,227 @@
/*
This file is part of FFTS -- The Fastest Fourier Transform in the South
Copyright (c) 2012, Anthony M. Blake <amb@anthonix.com>
Copyright (c) 2012, The University of Waikato
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 "ffts_real.h"
void ffts_free_1d_real(ffts_plan_t *p) {
ffts_free(p->plans[0]);
free(p->A);
free(p->B);
free(p->plans);
free(p->buf);
free(p);
}
void ffts_execute_1d_real(ffts_plan_t *p, const void *vin, void *vout) {
float *out = (float *)vout;
float *buf = (float *)p->buf;
float *A = p->A;
float *B = p->B;
p->plans[0]->transform(p->plans[0], vin, buf);
size_t N = p->N;
buf[N] = buf[0];
buf[N+1] = buf[1];
float *p_buf0 = buf;
float *p_buf1 = buf + N - 2;
float *p_out = out;
size_t i;
#ifdef __ARM_NEON__
for(i=0;i<N/2;i+=2) {
__asm__ __volatile__ ("vld1.32 {q8}, [%[pa], :128]!\n\t"
"vld1.32 {q9}, [%[pb], :128]!\n\t"
"vld1.32 {q10}, [%[buf0], :128]!\n\t"
"vld1.32 {q11}, [%[buf1], :64]\n\t"
"sub %[buf1], %[buf1], #16\n\t"
"vdup.32 d26, d16[1]\n\t"
"vdup.32 d27, d17[1]\n\t"
"vdup.32 d24, d16[0]\n\t"
"vdup.32 d25, d17[0]\n\t"
"vdup.32 d30, d23[1]\n\t"
"vdup.32 d31, d22[1]\n\t"
"vdup.32 d28, d23[0]\n\t"
"vdup.32 d29, d22[0]\n\t"
"vmul.f32 q13, q13, q10\n\t"
"vmul.f32 q15, q15, q9\n\t"
"vmul.f32 q12, q12, q10\n\t"
"vmul.f32 q14, q14, q9\n\t"
"vrev64.f32 q13, q13\n\t"
"vrev64.f32 q15, q15\n\t"
"vtrn.32 d26, d27\n\t"
"vtrn.32 d30, d31\n\t"
"vneg.f32 d26, d26\n\t"
"vneg.f32 d31, d31\n\t"
"vtrn.32 d26, d27\n\t"
"vtrn.32 d30, d31\n\t"
"vadd.f32 q12, q12, q14\n\t"
"vadd.f32 q13, q13, q15\n\t"
"vadd.f32 q12, q12, q13\n\t"
"vst1.32 {q12}, [%[pout], :128]!\n\t"
: [pa] "+r" (A), [pb] "+r" (B), [buf0] "+r" (p_buf0), [buf1] "+r" (p_buf1),
[pout] "+r" (p_out)
:
: "memory", "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15"
);
#else
for(i=0;i<N/2;i++) {
out[2*i] = buf[2*i]*A[2*i] - buf[2*i+1]*A[2*i+1] + buf[N-2*i]*B[2*i] + buf[N-2*i+1]*B[2*i+1];
out[2*i+1] = buf[2*i+1]*A[2*i] + buf[2*i]*A[2*i+1] + buf[N-2*i]*B[2*i+1] - buf[N-2*i+1]*B[2*i];
// out[2*N-2*i] = out[2*i];
// out[2*N-2*i+1] = -out[2*i+1];
#endif
}
out[N] = buf[0] - buf[1];
out[N+1] = 0.0f;
}
void ffts_execute_1d_real_inv(ffts_plan_t *p, const void *vin, void *vout) {
float *out = (float *)vout;
float *in = (float *)vin;
float *buf = (float *)p->buf;
float *A = p->A;
float *B = p->B;
size_t N = p->N;
float *p_buf0 = in;
float *p_buf1 = in + N - 2;
float *p_out = buf;
size_t i;
#ifdef __ARM_NEON__
for(i=0;i<N/2;i+=2) {
__asm__ __volatile__ ("vld1.32 {q8}, [%[pa], :128]!\n\t"
"vld1.32 {q9}, [%[pb], :128]!\n\t"
"vld1.32 {q10}, [%[buf0], :128]!\n\t"
"vld1.32 {q11}, [%[buf1], :64]\n\t"
"sub %[buf1], %[buf1], #16\n\t"
"vdup.32 d26, d16[1]\n\t"
"vdup.32 d27, d17[1]\n\t"
"vdup.32 d24, d16[0]\n\t"
"vdup.32 d25, d17[0]\n\t"
"vdup.32 d30, d23[1]\n\t"
"vdup.32 d31, d22[1]\n\t"
"vdup.32 d28, d23[0]\n\t"
"vdup.32 d29, d22[0]\n\t"
"vmul.f32 q13, q13, q10\n\t"
"vmul.f32 q15, q15, q9\n\t"
"vmul.f32 q12, q12, q10\n\t"
"vmul.f32 q14, q14, q9\n\t"
"vrev64.f32 q13, q13\n\t"
"vrev64.f32 q15, q15\n\t"
"vtrn.32 d26, d27\n\t"
"vtrn.32 d28, d29\n\t"
"vneg.f32 d27, d27\n\t"
"vneg.f32 d29, d29\n\t"
"vtrn.32 d26, d27\n\t"
"vtrn.32 d28, d29\n\t"
"vadd.f32 q12, q12, q14\n\t"
"vsub.f32 q13, q13, q15\n\t"
"vadd.f32 q12, q12, q13\n\t"
"vst1.32 {q12}, [%[pout], :128]!\n\t"
: [pa] "+r" (A), [pb] "+r" (B), [buf0] "+r" (p_buf0), [buf1] "+r" (p_buf1),
[pout] "+r" (p_out)
:
: "memory", "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15"
);
#else
for(i=0;i<N/2;i++) {
buf[2*i] = in[2*i]*A[2*i] + in[2*i+1]*A[2*i+1] + in[N-2*i]*B[2*i] - in[N-2*i+1]*B[2*i+1];
buf[2*i+1] = in[2*i+1]*A[2*i] - in[2*i]*A[2*i+1] - in[N-2*i]*B[2*i+1] - in[N-2*i+1]*B[2*i];
#endif
}
p->plans[0]->transform(p->plans[0], buf, out);
}
ffts_plan_t *ffts_init_1d_real(size_t N, int sign) {
ffts_plan_t *p = malloc(sizeof(ffts_plan_t));
if(sign < 0) p->transform = &ffts_execute_1d_real;
else p->transform = &ffts_execute_1d_real_inv;
p->destroy = &ffts_free_1d_real;
p->N = N;
p->rank = 1;
p->plans = malloc(sizeof(ffts_plan_t **) * 1);
p->plans[0] = ffts_init_1d(N/2, sign);
p->buf = valloc(sizeof(float) * 2 * ((N/2) + 1));
p->A = valloc(sizeof(float) * N);
p->B = valloc(sizeof(float) * N);
if(sign < 0) {
int i;
for (i = 0; i < N/2; i++) {
p->A[2 * i] = 0.5 * (1.0 - sin (2.0f * PI / (double) (N) * (double) i));
p->A[2 * i + 1] = 0.5 * (-1.0 * cos (2.0f * PI / (double) (N) * (double) i));
p->B[2 * i] = 0.5 * (1.0 + sin (2.0f * PI / (double) (N) * (double) i));
p->B[2 * i + 1] = 0.5 * (1.0 * cos (2.0f * PI / (double) (N) * (double) i));
}
}else{
int i;
for (i = 0; i < N/2; i++) {
p->A[2 * i] = 1.0 * (1.0 - sin (2.0f * PI / (double) (N) * (double) i));
p->A[2 * i + 1] = 1.0 * (-1.0 * cos (2.0f * PI / (double) (N) * (double) i));
p->B[2 * i] = 1.0 * (1.0 + sin (2.0f * PI / (double) (N) * (double) i));
p->B[2 * i + 1] = 1.0 * (1.0 * cos (2.0f * PI / (double) (N) * (double) i));
}
}
return p;
}
// vim: set autoindent noexpandtab tabstop=3 shiftwidth=3:

54
3rdparty/ffts/ffts-master/src/ffts_real.h vendored Executable file
View File

@@ -0,0 +1,54 @@
/*
This file is part of FFTS -- The Fastest Fourier Transform in the South
Copyright (c) 2012, Anthony M. Blake <amb@anthonix.com>
Copyright (c) 2012, The University of Waikato
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_REAL_H__
#define __FFTS_REAL_H__
#include <stdint.h>
#include <stddef.h>
#include <stdio.h>
#include "ffts.h"
#ifdef HAVE_NEON
#include <arm_neon.h>
#endif
#ifdef HAVE_SSE
#include <xmmintrin.h>
#endif
ffts_plan_t *ffts_init_1d_real(size_t N, int sign);
#endif
// vim: set autoindent noexpandtab tabstop=3 shiftwidth=3:

197
3rdparty/ffts/ffts-master/src/ffts_real_nd.c vendored Executable file
View File

@@ -0,0 +1,197 @@
/*
This file is part of FFTS -- The Fastest Fourier Transform in the South
Copyright (c) 2012, Anthony M. Blake <amb@anthonix.com>
Copyright (c) 2012, The University of Waikato
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 "ffts_real_nd.h"
#ifdef __ARM_NEON__
#include "neon.h"
#endif
void ffts_free_nd_real(ffts_plan_t *p) {
int i;
for(i=0;i<p->rank;i++) {
ffts_plan_t *x = p->plans[i];
int k;
for(k=i+1;k<p->rank;k++) {
if(x == p->plans[k]) p->plans[k] = NULL;
}
if(x) ffts_free(x);
}
free(p->Ns);
free(p->Ms);
free(p->plans);
free(p->buf);
free(p->transpose_buf);
free(p);
}
void ffts_scalar_transpose(uint64_t *in, uint64_t *out, int w, int h, uint64_t *buf) {
size_t i,j;
for(i=0;i<w;i+=1) {
for(j=0;j<h;j+=1) {
out[i*h + j] = in[j*w + i];
}
}
}
void ffts_execute_nd_real(ffts_plan_t *p, const void * in, void * out) {
uint32_t *din = (uint32_t *)in;
uint64_t *buf = p->buf;
uint64_t *dout = (uint64_t *)out;
size_t i,j;
for(i=0;i<p->Ns[0];i++) {
p->plans[0]->transform(p->plans[0], din + (i * p->Ms[0]), buf + (i * (p->Ms[0] / 2 + 1)));
}
ffts_scalar_transpose(buf, dout, p->Ms[0] / 2 + 1, p->Ns[0], p->transpose_buf);
for(i=1;i<p->rank;i++) {
for(j=0;j<p->Ns[i];j++) {
p->plans[i]->transform(p->plans[i], dout + (j * p->Ms[i]), buf + (j * p->Ms[i]));
}
ffts_scalar_transpose(buf, dout, p->Ms[i], p->Ns[i], p->transpose_buf);
}
}
void ffts_execute_nd_real_inv(ffts_plan_t *p, const void * in, void * out) {
uint64_t *din = (uint64_t *)in;
uint64_t *buf = p->buf;
uint64_t *buf2;
uint64_t *dout = (uint64_t *)out;
size_t vol = 1;
float *bufr = (float *)(p->buf);
float *doutr = (float *)out;
size_t i,j;
for(i=0;i<p->rank;i++) {
vol *= p->Ns[i];
}
buf2 = buf + vol;
ffts_scalar_transpose(din, buf, p->Ms[0], p->Ns[0], p->transpose_buf);
for(i=0;i<p->Ms[0];i++) {
p->plans[0]->transform(p->plans[0], buf + (i * p->Ns[0]), buf2 + (i * p->Ns[0]));
}
ffts_scalar_transpose(buf2, buf, p->Ns[0], p->Ms[0], p->transpose_buf);
for(j=0;j<p->Ms[1];j++) {
p->plans[1]->transform(p->plans[1], buf + (j * (p->Ms[0])), &doutr[j * p->Ns[1]]);
}
}
ffts_plan_t *ffts_init_nd_real(int rank, size_t *Ns, int sign) {
size_t vol = 1;
size_t bufsize;
ffts_plan_t *p = malloc(sizeof(ffts_plan_t));
if(sign < 0) p->transform = &ffts_execute_nd_real;
else p->transform = &ffts_execute_nd_real_inv;
p->destroy = &ffts_free_nd_real;
p->rank = rank;
p->Ns = malloc(sizeof(size_t) * rank);
p->Ms = malloc(sizeof(size_t) * rank);
p->plans = malloc(sizeof(ffts_plan_t **) * rank);
int i;
for(i=0;i<rank;i++) {
p->Ns[i] = Ns[i];
vol *= Ns[i];
}
//There is probably a prettier way of doing this, but it works..
if(sign < 0) {
bufsize = 2 * vol;
}
else {
bufsize = 2 * (Ns[0] * ((vol / Ns[0]) / 2 + 1) + vol);
}
p->buf = (void *)valloc(sizeof(float) * bufsize);
for(i=0;i<rank;i++) {
p->Ms[i] = vol / p->Ns[i];
p->plans[i] = NULL;
int k;
if(sign < 0) {
for(k=1;k<i;k++) {
if(p->Ms[k] == p->Ms[i]) p->plans[i] = p->plans[k];
}
if(!i) p->plans[i] = ffts_init_1d_real(p->Ms[i], sign);
else if(!p->plans[i]) p->plans[i] = ffts_init_1d(p->Ms[i], sign);
}else{
for(k=0;k<i;k++) {
if(p->Ns[k] == p->Ns[i]) p->plans[i] = p->plans[k];
}
if(i==rank-1) p->plans[i] = ffts_init_1d_real(p->Ns[i], sign);
else if(!p->plans[i]) p->plans[i] = ffts_init_1d(p->Ns[i], sign);
}
}
if(sign < 0) {
for(i=1;i<rank;i++) {
p->Ns[i] = p->Ns[i] / 2 + 1;
}
}else{
for(i=0;i<rank-1;i++) {
p->Ms[i] = p->Ms[i] / 2 + 1;
}
}
p->transpose_buf = valloc(sizeof(float) * 2 * 8 * 8);
return p;
}
ffts_plan_t *ffts_init_2d_real(size_t N1, size_t N2, int sign) {
size_t Ns[2];
Ns[0] = N1;
Ns[1] = N2;
return ffts_init_nd_real(2, Ns, sign);
}
// vim: set autoindent noexpandtab tabstop=3 shiftwidth=3:

54
3rdparty/ffts/ffts-master/src/ffts_real_nd.h vendored Executable file
View File

@@ -0,0 +1,54 @@
/*
This file is part of FFTS -- The Fastest Fourier Transform in the South
Copyright (c) 2012, Anthony M. Blake <amb@anthonix.com>
Copyright (c) 2012, The University of Waikato
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_REAL_ND_H__
#define __FFTS_REAL_ND_H__
#include <stdint.h>
#include <stddef.h>
#include <stdio.h>
#include "ffts_nd.h"
#include "ffts_real.h"
#include "ffts.h"
#ifdef HAVE_NEON
#include <arm_neon.h>
#endif
#ifdef HAVE_SSE
#include <xmmintrin.h>
#endif
#endif
// vim: set autoindent noexpandtab tabstop=3 shiftwidth=3:

157
3rdparty/ffts/ffts-master/src/ffts_small.c vendored Executable file
View File

@@ -0,0 +1,157 @@
/*
This file is part of FFTS -- The Fastest Fourier Transform in the South
Copyright (c) 2013, Michael J. Cree <mcree@orcon.net.nz>
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.
*/
#include "ffts.h"
#include "macros.h"
#include <stdlib.h>
#define DEBUG(x)
#include "ffts_small.h"
void firstpass_16_f(ffts_plan_t * p, const void * in, void * out)
{
const data_t *din = (const data_t *)in;
data_t *dout = (data_t *)out;
V r0_1,r2_3,r4_5,r6_7,r8_9,r10_11,r12_13,r14_15;
float *LUT8 = p->ws;
L_4_4(0, din+0,din+16,din+8,din+24,&r0_1,&r2_3,&r8_9,&r10_11);
L_2_4(0, din+4,din+20,din+28,din+12,&r4_5,&r6_7,&r14_15,&r12_13);
K_N(0, VLD(LUT8),VLD(LUT8+4),&r0_1,&r2_3,&r4_5,&r6_7);
K_N(0, VLD(LUT8+8),VLD(LUT8+12),&r0_1,&r4_5,&r8_9,&r12_13);
S_4(r0_1,r4_5,r8_9,r12_13,dout+0,dout+8,dout+16,dout+24);
K_N(0, VLD(LUT8+16),VLD(LUT8+20),&r2_3,&r6_7,&r10_11,&r14_15);
S_4(r2_3,r6_7,r10_11,r14_15,dout+4,dout+12,dout+20,dout+28);
}
void firstpass_16_b(ffts_plan_t * p, const void * in, void * out)
{
const data_t *din = (const data_t *)in;
data_t *dout = (data_t *)out;
V r0_1,r2_3,r4_5,r6_7,r8_9,r10_11,r12_13,r14_15;
float *LUT8 = p->ws;
L_4_4(1, din+0,din+16,din+8,din+24,&r0_1,&r2_3,&r8_9,&r10_11);
L_2_4(1, din+4,din+20,din+28,din+12,&r4_5,&r6_7,&r14_15,&r12_13);
K_N(1, VLD(LUT8),VLD(LUT8+4),&r0_1,&r2_3,&r4_5,&r6_7);
K_N(1, VLD(LUT8+8),VLD(LUT8+12),&r0_1,&r4_5,&r8_9,&r12_13);
S_4(r0_1,r4_5,r8_9,r12_13,dout+0,dout+8,dout+16,dout+24);
K_N(1, VLD(LUT8+16),VLD(LUT8+20),&r2_3,&r6_7,&r10_11,&r14_15);
S_4(r2_3,r6_7,r10_11,r14_15,dout+4,dout+12,dout+20,dout+28);
}
void firstpass_8_f(ffts_plan_t *p, const void *in, void *out)
{
const data_t *din = (const data_t *)in;
data_t *dout = (data_t *)out;
V r0_1, r2_3, r4_5, r6_7;
float *LUT8 = (float *)((size_t *)p->ws + p->ws_is[0]);
L_4_2(0, din, din+8, din+4, din+12, &r0_1, &r2_3, &r4_5, &r6_7);
K_N(0, VLD(LUT8), VLD(LUT8+4), &r0_1, &r2_3, &r4_5, &r6_7);
S_4(r0_1,r2_3,r4_5,r6_7,dout+0,dout+4,dout+8,dout+12);
}
void firstpass_8_b(ffts_plan_t *p, const void *in, void *out)
{
const data_t *din = (const data_t *)in;
data_t *dout = (data_t *)out;
V r0_1, r2_3, r4_5, r6_7;
float *LUT8 = (float *)((size_t *)p->ws + p->ws_is[0]);
L_4_2(1, din, din+8, din+4, din+12, &r0_1, &r2_3, &r4_5, &r6_7);
K_N(1, VLD(LUT8), VLD(LUT8+4), &r0_1, &r2_3, &r4_5, &r6_7);
S_4(r0_1,r2_3,r4_5,r6_7,dout+0,dout+4,dout+8,dout+12);
}
void firstpass_4_f(ffts_plan_t *p, const void *in, void *out)
{
const data_t *din = (const data_t *)in;
data_t *dout = (data_t *)out;
cdata_t t0, t1, t2, t3, t4, t5, t6, t7;
t0[0] = din[0]; t0[1] = din[1];
t1[0] = din[4]; t1[1] = din[5];
t2[0] = din[2]; t2[1] = din[3];
t3[0] = din[6]; t3[1] = din[7];
t4[0] = t0[0] + t1[0]; t4[1] = t0[1] + t1[1];
t5[0] = t0[0] - t1[0]; t5[1] = t0[1] - t1[1];
t6[0] = t2[0] + t3[0]; t6[1] = t2[1] + t3[1];
t7[0] = t2[0] - t3[0]; t7[1] = t2[1] - t3[1];
dout[0] = t4[0] + t6[0]; dout[1] = t4[1] + t6[1];
dout[4] = t4[0] - t6[0]; dout[5] = t4[1] - t6[1];
dout[2] = t5[0] + t7[1]; dout[3] = t5[1] - t7[0];
dout[6] = t5[0] - t7[1]; dout[7] = t5[1] + t7[0];
}
void firstpass_4_b(ffts_plan_t *p, const void *in, void *out)
{
const data_t *din = (const data_t *)in;
data_t *dout = (data_t *)out;
cdata_t t0, t1, t2, t3, t4, t5, t6, t7;
t0[0] = din[0]; t0[1] = din[1];
t1[0] = din[4]; t1[1] = din[5];
t2[0] = din[2]; t2[1] = din[3];
t3[0] = din[6]; t3[1] = din[7];
t4[0] = t0[0] + t1[0]; t4[1] = t0[1] + t1[1];
t5[0] = t0[0] - t1[0]; t5[1] = t0[1] - t1[1];
t6[0] = t2[0] + t3[0]; t6[1] = t2[1] + t3[1];
t7[0] = t2[0] - t3[0]; t7[1] = t2[1] - t3[1];
dout[0] = t4[0] + t6[0]; dout[1] = t4[1] + t6[1];
dout[4] = t4[0] - t6[0]; dout[5] = t4[1] - t6[1];
dout[2] = t5[0] - t7[1]; dout[3] = t5[1] + t7[0];
dout[6] = t5[0] + t7[1]; dout[7] = t5[1] - t7[0];
}
void firstpass_2(ffts_plan_t *p, const void *in, void *out)
{
const data_t *din = (const data_t *)in;
data_t *dout = (data_t *)out;
cdata_t t0, t1, r0,r1;
t0[0] = din[0]; t0[1] = din[1];
t1[0] = din[2]; t1[1] = din[3];
r0[0] = t0[0] + t1[0];
r0[1] = t0[1] + t1[1];
r1[0] = t0[0] - t1[0];
r1[1] = t0[1] - t1[1];
dout[0] = r0[0]; dout[1] = r0[1];
dout[2] = r1[0]; dout[3] = r1[1];
}
// vim: set autoindent noexpandtab tabstop=3 shiftwidth=3:

14
3rdparty/ffts/ffts-master/src/ffts_small.h vendored Executable file
View File

@@ -0,0 +1,14 @@
#ifndef __FFTS_SMALL_H__
#define __FFTS_SMALL_H__
void firstpass_16_f(ffts_plan_t * p, const void * in, void * out);
void firstpass_16_b(ffts_plan_t * p, const void * in, void * out);
void firstpass_8_f(ffts_plan_t * p, const void * in, void * out);
void firstpass_8_b(ffts_plan_t * p, const void * in, void * out);
void firstpass_4_f(ffts_plan_t * p, const void * in, void * out);
void firstpass_4_b(ffts_plan_t * p, const void * in, void * out);
void firstpass_2(ffts_plan_t * p, const void * in, void * out);
#endif
// vim: set autoindent noexpandtab tabstop=3 shiftwidth=3:

102
3rdparty/ffts/ffts-master/src/ffts_static.c vendored Executable file
View File

@@ -0,0 +1,102 @@
/*
This file is part of FFTS -- The Fastest Fourier Transform in the South
Copyright (c) 2012, Anthony M. Blake <amb@anthonix.com>
Copyright (c) 2012, The University of Waikato
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 "ffts_static.h"
void ffts_static_rec_i(ffts_plan_t *p, float *data, size_t N) {
if(N > 16) {
size_t N1 = N >> 1;
size_t N2 = N >> 2;
size_t N3 = N >> 3;
float *ws = ((float *)(p->ws)) + (p->ws_is[__builtin_ctzl(N)-4] << 1);
ffts_static_rec_i(p, data, N2);
ffts_static_rec_i(p, data + N1, N3);
ffts_static_rec_i(p, data + N1 + N2, N3);
ffts_static_rec_i(p, data + N, N2);
ffts_static_rec_i(p, data + N + N1, N2);
if(N == p->N) {
neon_static_x8_t_i(data, N, ws);
}else{
neon_static_x8_i(data, N, ws);
}
}else if(N==16){
neon_static_x4_i(data, N, p->ws);
}
}
void ffts_static_rec_f(ffts_plan_t *p, float *data, size_t N) {
if(N > 16) {
size_t N1 = N >> 1;
size_t N2 = N >> 2;
size_t N3 = N >> 3;
float *ws = ((float *)(p->ws)) + (p->ws_is[__builtin_ctzl(N)-4] << 1);
ffts_static_rec_f(p, data, N2);
ffts_static_rec_f(p, data + N1, N3);
ffts_static_rec_f(p, data + N1 + N2, N3);
ffts_static_rec_f(p, data + N, N2);
ffts_static_rec_f(p, data + N + N1, N2);
if(N == p->N) {
neon_static_x8_t_f(data, N, ws);
}else{
neon_static_x8_f(data, N, ws);
}
}else if(N==16){
neon_static_x4_f(data, N, p->ws);
}
}
void ffts_static_transform_f(ffts_plan_t *p, const void *in, void *out) {
if(__builtin_ctzl(p->N) & 1)
neon_static_o_f(p, in, out);
else
neon_static_e_f(p, in, out);
ffts_static_rec_f(p, out, p->N);
}
void ffts_static_transform_i(ffts_plan_t *p, const void *in, void *out) {
if(__builtin_ctzl(p->N) & 1)
neon_static_o_i(p, in, out);
else
neon_static_e_i(p, in, out);
ffts_static_rec_i(p, out, p->N);
}
// vim: set autoindent noexpandtab tabstop=3 shiftwidth=3:

47
3rdparty/ffts/ffts-master/src/ffts_static.h vendored Executable file
View File

@@ -0,0 +1,47 @@
/*
This file is part of FFTS -- The Fastest Fourier Transform in the South
Copyright (c) 2012, Anthony M. Blake <amb@anthonix.com>
Copyright (c) 2012, The University of Waikato
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_STATIC_H__
#define __FFTS_STATIC_H__
#include "ffts.h"
#include "neon.h"
void ffts_static_rec_f(ffts_plan_t *p, float *data, size_t N) ;
void ffts_static_transform_f(ffts_plan_t *p, const void *in, void *out);
void ffts_static_rec_i(ffts_plan_t *p, float *data, size_t N) ;
void ffts_static_transform_i(ffts_plan_t *p, const void *in, void *out);
#endif
// vim: set autoindent noexpandtab tabstop=3 shiftwidth=3:

207
3rdparty/ffts/ffts-master/src/macros-alpha.h vendored Executable file
View File

@@ -0,0 +1,207 @@
/*
This file is part of FFTS -- The Fastest Fourier Transform in the South
Copyright (c) 2013, Michael J. Cree <mcree@orcon.net.nz>
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.
*/
#ifndef __MACROS_ALPHA_H__
#define __MACROS_ALPHA_H__
#include <math.h>
#ifdef __alpha__
#define restrict
#endif
typedef struct {float r1, i1, r2, i2;} V;
#define FFTS_MALLOC(d,a) malloc(d)
#define FFTS_FREE(d) free(d)
#define VLIT4(f3,f2,f1,f0) ((V){f0,f1,f2,f3})
static inline V VADD(V x, V y)
{
V z;
z.r1 = x.r1 + y.r1;
z.i1 = x.i1 + y.i1;
z.r2 = x.r2 + y.r2;
z.i2 = x.i2 + y.i2;
return z;
}
static inline V VSUB(V x, V y)
{
V z;
z.r1 = x.r1 - y.r1;
z.i1 = x.i1 - y.i1;
z.r2 = x.r2 - y.r2;
z.i2 = x.i2 - y.i2;
return z;
}
static inline V VMUL(V x, V y)
{
V z;
z.r1 = x.r1 * y.r1;
z.i1 = x.i1 * y.i1;
z.r2 = x.r2 * y.r2;
z.i2 = x.i2 * y.i2;
return z;
}
static inline V VXOR(V x, V y)
{
V r;
r.r1 = (uint32_t)x.r1 ^ (uint32_t)y.r1;
r.i1 = (uint32_t)x.i1 ^ (uint32_t)y.i1;
r.r2 = (uint32_t)x.r2 ^ (uint32_t)y.r2;
r.i2 = (uint32_t)x.i2 ^ (uint32_t)y.i2;
return r;
}
static inline V VSWAPPAIRS(V x)
{
V z;
z.r1 = x.i1;
z.i1 = x.r1;
z.r2 = x.i2;
z.i2 = x.r2;
return z;
}
static inline V VBLEND(V x, V y)
{
V z;
z.r1 = x.r1;
z.i1 = x.i1;
z.r2 = y.r2;
z.i2 = y.i2;
return z;
}
static inline V VUNPACKHI(V x, V y)
{
V z;
z.r1 = x.r2;
z.i1 = x.i2;
z.r2 = y.r2;
z.i2 = y.i2;
return z;
}
static inline V VUNPACKLO(V x, V y)
{
V z;
z.r1 = x.r1;
z.i1 = x.i1;
z.r2 = y.r1;
z.i2 = y.i1;
return z;
}
static inline V VDUPRE(V x)
{
V z;
z.r1 = x.r1;
z.i1 = x.r1;
z.r2 = x.r2;
z.i2 = x.r2;
return z;
}
static inline V VDUPIM(V x)
{
V z;
z.r1 = x.i1;
z.i1 = x.i1;
z.r2 = x.i2;
z.i2 = x.i2;
return z;
}
static inline V IMUL(V d, V re, V im)
{
re = VMUL(re, d);
im = VMUL(im, VSWAPPAIRS(d));
return VSUB(re, im);
}
static inline V IMULJ(V d, V re, V im)
{
re = VMUL(re, d);
im = VMUL(im, VSWAPPAIRS(d));
return VADD(re, im);
}
static inline V MULI(int inv, V x)
{
V z;
if (inv) {
z.r1 = -x.r1;
z.i1 = x.i1;
z.r2 = -x.r2;
z.i2 = x.i2;
}else{
z.r1 = x.r1;
z.i1 = -x.i1;
z.r2 = x.r2;
z.i2 = -x.i2;
}
return z;
}
static inline V IMULI(int inv, V x)
{
return VSWAPPAIRS(MULI(inv, x));
}
static inline V VLD(const void *s)
{
V *d = (V *)s;
return *d;
}
static inline void VST(void *d, V s)
{
V *r = (V *)d;
*r = s;
}
#endif
// vim: set autoindent noexpandtab tabstop=3 shiftwidth=3:

138
3rdparty/ffts/ffts-master/src/macros-altivec.h vendored Executable file
View File

@@ -0,0 +1,138 @@
/*
This file is part of FFTS -- The Fastest Fourier Transform in the South
Copyright (c) 2013, Michael J. Cree <mcree@orcon.net.nz>
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.
*/
#ifndef __MACROS_ALTIVEC_H__
#define __MACROS_ALTIVEC_H__
#include <math.h>
#include <altivec.h>
#define restrict
typedef vector float V;
typedef vector unsigned char VUC;
#ifdef __apple__
#define FFTS_MALLOC(d,a) vec_malloc(d)
#define FFTS_FREE(d) vec_free(d)
#else
/* It appears vec_malloc() and friends are not implemented on Linux */
#include <malloc.h>
#define FFTS_MALLOC(d,a) memalign(16,d)
#define FFTS_FREE(d) free(d)
#endif
#define VLIT4(f0,f1,f2,f3) ((V){f0, f1, f2, f3})
#define VADD(x,y) vec_add(x,y)
#define VSUB(x,y) vec_sub(x,y)
#define VMUL(x,y) vec_madd(x,y,(V){0})
#define VMULADD(x,y,z) vec_madd(x,y,z)
#define VNMULSUB(x,y,z) vec_nmsub(x,y,z)
#define VXOR(x,y) vec_xor((x),(y))
#define VSWAPPAIRS(x) \
vec_perm(x,x,(VUC){0x04,0x05,0x06,0x07,0x00,0x01,0x02,0x03, \
0x0c,0x0d,0x0e,0x0f,0x08,0x09,0x0a,0x0b})
#define VBLEND(x,y) \
vec_perm(x,y,(VUC){0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07, \
0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f})
#define VUNPACKHI(x,y) \
vec_perm(x,y,(VUC){0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, \
0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f})
#define VUNPACKLO(x,y) \
vec_perm(x,y,(VUC){0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07, \
0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17})
#define VDUPRE(x) \
vec_perm(x,x,(VUC){0x00,0x01,0x02,0x03,0x00,0x01,0x02,0x03, \
0x18,0x19,0x1a,0x1b,0x18,0x19,0x1a,0x1b})
#define VDUPIM(x) \
vec_perm(x,x,(VUC){0x04,0x05,0x06,0x07,0x04,0x05,0x06,0x07, \
0x1c,0x1d,0x1e,0x1f,0x1c,0x1d,0x1e,0x1f})
static inline V IMUL(V d, V re, V im)
{
im = VMUL(im, VSWAPPAIRS(d));
re = VMUL(re, d);
return VSUB(re, im);
}
static inline V IMULJ(V d, V re, V im)
{
im = VMUL(im, VSWAPPAIRS(d));
return VMULADD(re, d, im);
}
#ifndef __GNUC__
/* gcc (4.6 and 4.7) ICEs on this code! */
static inline V MULI(int inv, V x)
{
return VXOR(x, inv ? VLIT4(-0.0f,0.0f,-0.0f,0.0f) : VLIT4(0.0f,-0.0f,0.0f,-0.0f));
}
#else
/* but compiles this fine... */
static inline V MULI(int inv, V x)
{
V t;
t = inv ? VLIT4(-0.0f,0.0f,-0.0f,0.0f) : VLIT4(0.0f,-0.0f,0.0f,-0.0f);
return VXOR(x, t);
}
#endif
static inline V IMULI(int inv, V x)
{
return VSWAPPAIRS(MULI(inv, x));
}
static inline V VLD(const void *s)
{
V *d = (V *)s;
return *d;
}
static inline void VST(void *d, V s)
{
V *r = (V *)d;
*r = s;
}
#endif
// vim: set autoindent noexpandtab tabstop=3 shiftwidth=3:

97
3rdparty/ffts/ffts-master/src/macros-neon.h vendored Executable file
View File

@@ -0,0 +1,97 @@
/*
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.
*/
#ifndef __MACROS_NEON_H__
#define __MACROS_NEON_H__
#include "neon.h"
#include <arm_neon.h>
typedef float32x4_t V;
typedef float32x4x2_t VS;
#define ADD vaddq_f32
#define SUB vsubq_f32
#define MUL vmulq_f32
#define VADD vaddq_f32
#define VSUB vsubq_f32
#define VMUL vmulq_f32
#define VXOR(x,y) (vreinterpretq_f32_u32(veorq_u32(vreinterpretq_u32_f32(x), vreinterpretq_u32_f32(y))))
#define VST vst1q_f32
#define VLD vld1q_f32
#define VST2 vst2q_f32
#define VLD2 vld2q_f32
#define VSWAPPAIRS(x) (vrev64q_f32(x))
#define VUNPACKHI(a,b) (vcombine_f32(vget_high_f32(a), vget_high_f32(b)))
#define VUNPACKLO(a,b) (vcombine_f32(vget_low_f32(a), vget_low_f32(b)))
#define VBLEND(x,y) (vcombine_f32(vget_low_f32(x), vget_high_f32(y)))
__INLINE V VLIT4(data_t f3, data_t f2, data_t f1, data_t f0) {
data_t __attribute__ ((aligned(16))) d[4] = {f0, f1, f2, f3};
return VLD(d);
}
#define VDUPRE(r) vcombine_f32(vdup_lane_f32(vget_low_f32(r),0), vdup_lane_f32(vget_high_f32(r),0))
#define VDUPIM(r) vcombine_f32(vdup_lane_f32(vget_low_f32(r),1), vdup_lane_f32(vget_high_f32(r),1))
#define FFTS_MALLOC(d,a) (valloc(d))
#define FFTS_FREE(d) (free(d))
__INLINE void STORESPR(data_t * addr, VS p) {
vst1q_f32(addr, p.val[0]);
vst1q_f32(addr + 4, p.val[1]);
}
__INLINE V IMULI(int inv, V a) {
if(inv) return VSWAPPAIRS(VXOR(a, VLIT4(0.0f, -0.0f, 0.0f, -0.0f)));
else return VSWAPPAIRS(VXOR(a, VLIT4(-0.0f, 0.0f, -0.0f, 0.0f)));
}
__INLINE V IMUL(V d, V re, V im) {
re = VMUL(re, d);
im = VMUL(im, VSWAPPAIRS(d));
return VSUB(re, im);
}
__INLINE V IMULJ(V d, V re, V im) {
re = VMUL(re, d);
im = VMUL(im, VSWAPPAIRS(d));
return VADD(re, im);
}
#endif
// vim: set autoindent noexpandtab tabstop=3 shiftwidth=3:

85
3rdparty/ffts/ffts-master/src/macros-sse.h vendored Executable file
View File

@@ -0,0 +1,85 @@
/*
This file is part of FFTS -- The Fastest Fourier Transform in the South
Copyright (c) 2012, Anthony M. Blake <amb@anthonix.com>
Copyright (c) 2012, The University of Waikato
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 __SSE_FLOAT_H__
#define __SSE_FLOAT_H__
#include <xmmintrin.h>
//#define VL 4
typedef __m128 V;
#define VADD _mm_add_ps
#define VSUB _mm_sub_ps
#define VMUL _mm_mul_ps
//#define VLIT4 _mm_set_ps
#define VXOR _mm_xor_ps
#define VST _mm_store_ps
#define VLD _mm_load_ps
#define VSWAPPAIRS(x) (_mm_shuffle_ps(x,x,_MM_SHUFFLE(2,3,0,1)))
#define VUNPACKHI(x,y) (_mm_shuffle_ps(x,y,_MM_SHUFFLE(3,2,3,2)))
#define VUNPACKLO(x,y) (_mm_shuffle_ps(x,y,_MM_SHUFFLE(1,0,1,0)))
#define VBLEND(x,y) (_mm_shuffle_ps(x,y,_MM_SHUFFLE(3,2,1,0)))
#define VLIT4 _mm_set_ps
#define VDUPRE(r) (_mm_shuffle_ps(r,r,_MM_SHUFFLE(2,2,0,0)))
#define VDUPIM(r) (_mm_shuffle_ps(r,r,_MM_SHUFFLE(3,3,1,1)))
#define FFTS_MALLOC(d,a) (_mm_malloc(d,a))
#define FFTS_FREE(d) (_mm_free(d))
__INLINE V IMULI(int inv, V a) {
if(inv) return VSWAPPAIRS(VXOR(a, VLIT4(0.0f, -0.0f, 0.0f, -0.0f)));
else return VSWAPPAIRS(VXOR(a, VLIT4(-0.0f, 0.0f, -0.0f, 0.0f)));
}
__INLINE V IMUL(V d, V re, V im) {
re = VMUL(re, d);
im = VMUL(im, VSWAPPAIRS(d));
return VSUB(re, im);
}
__INLINE V IMULJ(V d, V re, V im) {
re = VMUL(re, d);
im = VMUL(im, VSWAPPAIRS(d));
return VADD(re, im);
}
#endif
// vim: set autoindent noexpandtab tabstop=3 shiftwidth=3:

162
3rdparty/ffts/ffts-master/src/macros.h vendored Executable file
View File

@@ -0,0 +1,162 @@
/*
This file is part of FFTS -- The Fastest Fourier Transform in the South
Copyright (c) 2013, Michael J. Cree <mcree@orcon.net.nz>
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.
*/
#ifndef __MACROS_H__
#define __MACROS_H__
#ifdef HAVE_NEON
#include "macros-neon.h"
#else
#ifdef __alpha__
#include "macros-alpha.h"
#else
#ifdef __powerpc__
#include "macros-altivec.h"
#endif
#endif
#endif
#ifdef HAVE_VFP
#include "macros-alpha.h"
#endif
#ifdef HAVE_SSE
#include "macros-sse.h"
#endif
static inline void TX2(V *a, V *b)
{
V TX2_t0 = VUNPACKLO(*a, *b);
V TX2_t1 = VUNPACKHI(*a, *b);
*a = TX2_t0; *b = TX2_t1;
}
static inline void K_N(int inv, V re, V im, V *r0, V *r1, V *r2, V *r3)
{
V uk, uk2, zk_p, zk_n, zk, zk_d;
uk = *r0; uk2 = *r1;
zk_p = IMUL(*r2, re, im);
zk_n = IMULJ(*r3, re, im);
zk = VADD(zk_p, zk_n);
zk_d = IMULI(inv, VSUB(zk_p, zk_n));
*r2 = VSUB(uk, zk);
*r0 = VADD(uk, zk);
*r3 = VADD(uk2, zk_d);
*r1 = VSUB(uk2, zk_d);
}
static inline void S_4(V r0, V r1, V r2, V r3,
data_t * restrict o0, data_t * restrict o1,
data_t * restrict o2, data_t * restrict o3)
{
VST(o0, r0); VST(o1, r1); VST(o2, r2); VST(o3, r3);
}
static inline void L_2_4(int inv,
const data_t * restrict i0, const data_t * restrict i1,
const data_t * restrict i2, const data_t * restrict i3,
V *r0, V *r1, V *r2, V *r3)
{
V t0, t1, t2, t3, t4, t5, t6, t7;
t0 = VLD(i0); t1 = VLD(i1); t2 = VLD(i2); t3 = VLD(i3);
t4 = VADD(t0, t1);
t5 = VSUB(t0, t1);
t6 = VADD(t2, t3);
t7 = VSUB(t2, t3);
*r0 = VUNPACKLO(t4, t5);
*r1 = VUNPACKLO(t6, t7);
t5 = IMULI(inv, t5);
t0 = VADD(t6, t4);
t2 = VSUB(t6, t4);
t1 = VSUB(t7, t5);
t3 = VADD(t7, t5);
*r3 = VUNPACKHI(t0, t1);
*r2 = VUNPACKHI(t2, t3);
}
static inline void L_4_4(int inv,
const data_t * restrict i0, const data_t * restrict i1,
const data_t * restrict i2, const data_t * restrict i3,
V *r0, V *r1, V *r2, V *r3)
{
V t0, t1, t2, t3, t4, t5, t6, t7;
t0 = VLD(i0); t1 = VLD(i1); t2 = VLD(i2); t3 = VLD(i3);
t4 = VADD(t0, t1);
t5 = VSUB(t0, t1);
t6 = VADD(t2, t3);
t7 = IMULI(inv, VSUB(t2, t3));
t0 = VADD(t4, t6);
t2 = VSUB(t4, t6);
t1 = VSUB(t5, t7);
t3 = VADD(t5, t7);
TX2(&t0, &t1);
TX2(&t2, &t3);
*r0 = t0; *r2 = t1; *r1 = t2; *r3 = t3;
}
static inline void L_4_2(int inv,
const data_t * restrict i0, const data_t * restrict i1,
const data_t * restrict i2, const data_t * restrict i3,
V *r0, V *r1, V *r2, V *r3)
{
V t0, t1, t2, t3, t4, t5, t6, t7;
t0 = VLD(i0); t1 = VLD(i1); t6 = VLD(i2); t7 = VLD(i3);
t2 = VBLEND(t6, t7);
t3 = VBLEND(t7, t6);
t4 = VADD(t0, t1);
t5 = VSUB(t0, t1);
t6 = VADD(t2, t3);
t7 = VSUB(t2, t3);
*r2 = VUNPACKHI(t4, t5);
*r3 = VUNPACKHI(t6, t7);
t7 = IMULI(inv, t7);
t0 = VADD(t4, t6);
t2 = VSUB(t4, t6);
t1 = VSUB(t5, t7);
t3 = VADD(t5, t7);
*r0 = VUNPACKLO(t0, t1);
*r1 = VUNPACKLO(t2, t3);
}
#endif
// vim: set autoindent noexpandtab tabstop=3 shiftwidth=3:

66
3rdparty/ffts/ffts-master/src/neon.h vendored Executable file
View File

@@ -0,0 +1,66 @@
/*
This file is part of FFTS -- The Fastest Fourier Transform in the South
Copyright (c) 2012, Anthony M. Blake <amb@anthonix.com>
Copyright (c) 2012, The University of Waikato
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 __NEON_H__
#define __NEON_H__
#include "ffts.h"
void neon_x4(float *, size_t, float *);
void neon_x8(float *, size_t, float *);
void neon_x8_t(float *, size_t, float *);
void neon_ee();
void neon_oo();
void neon_eo();
void neon_oe();
void neon_end();
void neon_transpose(uint64_t *in, uint64_t *out, int w, int h);
void neon_transpose_to_buf(uint64_t *in, uint64_t *out, int w);
//typedef struct _ffts_plan_t ffts_plan_t;
void neon_static_e_f(ffts_plan_t * , const void * , void * );
void neon_static_o_f(ffts_plan_t * , const void * , void * );
void neon_static_x4_f(float *, size_t, float *);
void neon_static_x8_f(float *, size_t, float *);
void neon_static_x8_t_f(float *, size_t, float *);
void neon_static_e_i(ffts_plan_t * , const void * , void * );
void neon_static_o_i(ffts_plan_t * , const void * , void * );
void neon_static_x4_i(float *, size_t, float *);
void neon_static_x8_i(float *, size_t, float *);
void neon_static_x8_t_i(float *, size_t, float *);
#endif
// vim: set autoindent noexpandtab tabstop=3 shiftwidth=3:

738
3rdparty/ffts/ffts-master/src/neon.s vendored Executable file
View File

@@ -0,0 +1,738 @@
/*
This file is part of FFTS -- The Fastest Fourier Transform in the South
Copyright (c) 2012, Anthony M. Blake <amb@anthonix.com>
Copyright (c) 2012, The University of Waikato
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.
*/
.align 4
#ifdef __APPLE__
.globl _neon_x4
_neon_x4:
#else
.globl neon_x4
neon_x4:
#endif
@ add r3, r0, #0
vld1.32 {q8,q9}, [r0, :128]
add r4, r0, r1, lsl #1
vld1.32 {q10,q11}, [r4, :128]
add r5, r0, r1, lsl #2
vld1.32 {q12,q13}, [r5, :128]
add r6, r4, r1, lsl #2
vld1.32 {q14,q15}, [r6, :128]
vld1.32 {q2,q3}, [r2, :128]
vmul.f32 q0, q13, q3
vmul.f32 q5, q12, q2
vmul.f32 q1, q14, q2
vmul.f32 q4, q14, q3
vmul.f32 q14, q12, q3
vmul.f32 q13, q13, q2
vmul.f32 q12, q15, q3
vmul.f32 q2, q15, q2
vsub.f32 q0, q5, q0
vadd.f32 q13, q13, q14
vadd.f32 q12, q12, q1
vsub.f32 q1, q2, q4
vadd.f32 q15, q0, q12
vsub.f32 q12, q0, q12
vadd.f32 q14, q13, q1
vsub.f32 q13, q13, q1
vadd.f32 q0, q8, q15
vadd.f32 q1, q9, q14
vsub.f32 q2, q10, q13 @
vsub.f32 q4, q8, q15
vadd.f32 q3, q11, q12 @
vst1.32 {q0,q1}, [r0, :128]
vsub.f32 q5, q9, q14
vadd.f32 q6, q10, q13 @
vsub.f32 q7, q11, q12 @
vst1.32 {q2,q3}, [r4, :128]
vst1.32 {q4,q5}, [r5, :128]
vst1.32 {q6,q7}, [r6, :128]
bx lr
.align 4
#ifdef __APPLE__
.globl _neon_x8
_neon_x8:
#else
.globl neon_x8
neon_x8:
#endif
mov r11, #0
add r3, r0, #0 @ data0
add r5, r0, r1, lsl #1 @ data2
add r4, r0, r1 @ data1
add r7, r5, r1, lsl #1 @ data4
add r6, r5, r1 @ data3
add r9, r7, r1, lsl #1 @ data6
add r8, r7, r1 @ data5
add r10, r9, r1 @ data7
add r12, r2, #0 @ LUT
sub r11, r11, r1, lsr #5
neon_x8_loop:
vld1.32 {q2,q3}, [r12, :128]!
vld1.32 {q14,q15}, [r6, :128]
vld1.32 {q10,q11}, [r5, :128]
adds r11, r11, #1
vmul.f32 q12, q15, q2
vmul.f32 q8, q14, q3
vmul.f32 q13, q14, q2
vmul.f32 q9, q10, q3
vmul.f32 q1, q10, q2
vmul.f32 q0, q11, q2
vmul.f32 q14, q11, q3
vmul.f32 q15, q15, q3
vld1.32 {q2,q3}, [r12, :128]!
vsub.f32 q10, q12, q8
vadd.f32 q11, q0, q9
vadd.f32 q8, q15, q13
vld1.32 {q12,q13}, [r4, :128]
vsub.f32 q9, q1, q14
vsub.f32 q15, q11, q10
vsub.f32 q14, q9, q8
vsub.f32 q4, q12, q15 @
vadd.f32 q6, q12, q15 @
vadd.f32 q5, q13, q14 @
vsub.f32 q7, q13, q14 @
vld1.32 {q14,q15}, [r9, :128]
vld1.32 {q12,q13}, [r7, :128]
vmul.f32 q1, q14, q2
vmul.f32 q0, q14, q3
vst1.32 {q4,q5}, [r4, :128]
vmul.f32 q14, q15, q3
vmul.f32 q4, q15, q2
vadd.f32 q15, q9, q8
vst1.32 {q6,q7}, [r6, :128]
vmul.f32 q8, q12, q3
vmul.f32 q5, q13, q3
vmul.f32 q12, q12, q2
vmul.f32 q9, q13, q2
vadd.f32 q14, q14, q1
vsub.f32 q13, q4, q0
vadd.f32 q0, q9, q8
vld1.32 {q8,q9}, [r3, :128]
vadd.f32 q1, q11, q10
vsub.f32 q12, q12, q5
vadd.f32 q11, q8, q15
vsub.f32 q8, q8, q15
vadd.f32 q2, q12, q14
vsub.f32 q10, q0, q13
vadd.f32 q15, q0, q13
vadd.f32 q13, q9, q1
vsub.f32 q9, q9, q1
vsub.f32 q12, q12, q14
vadd.f32 q0, q11, q2
vadd.f32 q1, q13, q15
vsub.f32 q4, q11, q2
vsub.f32 q2, q8, q10 @
vadd.f32 q3, q9, q12 @
vst1.32 {q0,q1}, [r3, :128]!
vsub.f32 q5, q13, q15
vld1.32 {q14,q15}, [r10, :128]
vsub.f32 q7, q9, q12 @
vld1.32 {q12,q13}, [r8, :128]
vst1.32 {q2,q3}, [r5, :128]!
vld1.32 {q2,q3}, [r12, :128]!
vadd.f32 q6, q8, q10 @
vmul.f32 q8, q14, q2
vst1.32 {q4,q5}, [r7, :128]!
vmul.f32 q10, q15, q3
vmul.f32 q9, q13, q3
vmul.f32 q11, q12, q2
vmul.f32 q14, q14, q3
vst1.32 {q6,q7}, [r9, :128]!
vmul.f32 q15, q15, q2
vmul.f32 q12, q12, q3
vmul.f32 q13, q13, q2
vadd.f32 q10, q10, q8
vsub.f32 q11, q11, q9
vld1.32 {q8,q9}, [r4, :128]
vsub.f32 q14, q15, q14
vadd.f32 q15, q13, q12
vadd.f32 q13, q11, q10
vadd.f32 q12, q15, q14
vsub.f32 q15, q15, q14
vsub.f32 q14, q11, q10
vld1.32 {q10,q11}, [r6, :128]
vadd.f32 q0, q8, q13
vadd.f32 q1, q9, q12
vsub.f32 q2, q10, q15 @
vadd.f32 q3, q11, q14 @
vsub.f32 q4, q8, q13
vst1.32 {q0,q1}, [r4, :128]!
vsub.f32 q5, q9, q12
vadd.f32 q6, q10, q15 @
vst1.32 {q2,q3}, [r6, :128]!
vsub.f32 q7, q11, q14 @
vst1.32 {q4,q5}, [r8, :128]!
vst1.32 {q6,q7}, [r10, :128]!
bne neon_x8_loop
bx lr
.align 4
#ifdef __APPLE__
.globl _neon_x8_t
_neon_x8_t:
#else
.globl neon_x8_t
neon_x8_t:
#endif
mov r11, #0
add r3, r0, #0 @ data0
add r5, r0, r1, lsl #1 @ data2
add r4, r0, r1 @ data1
add r7, r5, r1, lsl #1 @ data4
add r6, r5, r1 @ data3
add r9, r7, r1, lsl #1 @ data6
add r8, r7, r1 @ data5
add r10, r9, r1 @ data7
add r12, r2, #0 @ LUT
sub r11, r11, r1, lsr #5
neon_x8_t_loop:
vld1.32 {q2,q3}, [r12, :128]!
vld1.32 {q14,q15}, [r6, :128]
vld1.32 {q10,q11}, [r5, :128]
adds r11, r11, #1
vmul.f32 q12, q15, q2
vmul.f32 q8, q14, q3
vmul.f32 q13, q14, q2
vmul.f32 q9, q10, q3
vmul.f32 q1, q10, q2
vmul.f32 q0, q11, q2
vmul.f32 q14, q11, q3
vmul.f32 q15, q15, q3
vld1.32 {q2,q3}, [r12, :128]!
vsub.f32 q10, q12, q8
vadd.f32 q11, q0, q9
vadd.f32 q8, q15, q13
vld1.32 {q12,q13}, [r4, :128]
vsub.f32 q9, q1, q14
vsub.f32 q15, q11, q10
vsub.f32 q14, q9, q8
vsub.f32 q4, q12, q15 @
vadd.f32 q6, q12, q15 @
vadd.f32 q5, q13, q14 @
vsub.f32 q7, q13, q14 @
vld1.32 {q14,q15}, [r9, :128]
vld1.32 {q12,q13}, [r7, :128]
vmul.f32 q1, q14, q2
vmul.f32 q0, q14, q3
vst1.32 {q4,q5}, [r4, :128]
vmul.f32 q14, q15, q3
vmul.f32 q4, q15, q2
vadd.f32 q15, q9, q8
vst1.32 {q6,q7}, [r6, :128]
vmul.f32 q8, q12, q3
vmul.f32 q5, q13, q3
vmul.f32 q12, q12, q2
vmul.f32 q9, q13, q2
vadd.f32 q14, q14, q1
vsub.f32 q13, q4, q0
vadd.f32 q0, q9, q8
vld1.32 {q8,q9}, [r3, :128]
vadd.f32 q1, q11, q10
vsub.f32 q12, q12, q5
vadd.f32 q11, q8, q15
vsub.f32 q8, q8, q15
vadd.f32 q2, q12, q14
vsub.f32 q10, q0, q13
vadd.f32 q15, q0, q13
vadd.f32 q13, q9, q1
vsub.f32 q9, q9, q1
vsub.f32 q12, q12, q14
vadd.f32 q0, q11, q2
vadd.f32 q1, q13, q15
vsub.f32 q4, q11, q2
vsub.f32 q2, q8, q10 @
vadd.f32 q3, q9, q12 @
vst2.32 {q0,q1}, [r3, :128]!
vsub.f32 q5, q13, q15
vld1.32 {q14,q15}, [r10, :128]
vsub.f32 q7, q9, q12 @
vld1.32 {q12,q13}, [r8, :128]
vst2.32 {q2,q3}, [r5, :128]!
vld1.32 {q2,q3}, [r12, :128]!
vadd.f32 q6, q8, q10 @
vmul.f32 q8, q14, q2
vst2.32 {q4,q5}, [r7, :128]!
vmul.f32 q10, q15, q3
vmul.f32 q9, q13, q3
vmul.f32 q11, q12, q2
vmul.f32 q14, q14, q3
vst2.32 {q6,q7}, [r9, :128]!
vmul.f32 q15, q15, q2
vmul.f32 q12, q12, q3
vmul.f32 q13, q13, q2
vadd.f32 q10, q10, q8
vsub.f32 q11, q11, q9
vld1.32 {q8,q9}, [r4, :128]
vsub.f32 q14, q15, q14
vadd.f32 q15, q13, q12
vadd.f32 q13, q11, q10
vadd.f32 q12, q15, q14
vsub.f32 q15, q15, q14
vsub.f32 q14, q11, q10
vld1.32 {q10,q11}, [r6, :128]
vadd.f32 q0, q8, q13
vadd.f32 q1, q9, q12
vsub.f32 q2, q10, q15 @
vadd.f32 q3, q11, q14 @
vsub.f32 q4, q8, q13
vst2.32 {q0,q1}, [r4, :128]!
vsub.f32 q5, q9, q12
vadd.f32 q6, q10, q15 @
vst2.32 {q2,q3}, [r6, :128]!
vsub.f32 q7, q11, q14 @
vst2.32 {q4,q5}, [r8, :128]!
vst2.32 {q6,q7}, [r10, :128]!
bne neon_x8_t_loop
@bx lr
@ assumes r0 = out
@ r1 = in ?
@
@ r12 = offsets
@ r3-r10 = data pointers
@ r11 = loop iterations
@ r2 & lr = temps
.align 4
#ifdef __APPLE__
.globl _neon_ee
_neon_ee:
#else
.globl neon_ee
neon_ee:
#endif
vld1.32 {d16, d17}, [r2, :128]
_neon_ee_loop:
vld2.32 {q15}, [r10, :128]!
vld2.32 {q13}, [r8, :128]!
vld2.32 {q14}, [r7, :128]!
vld2.32 {q9}, [r4, :128]!
vld2.32 {q10}, [r3, :128]!
vld2.32 {q11}, [r6, :128]!
vld2.32 {q12}, [r5, :128]!
vsub.f32 q1, q14, q13
vld2.32 {q0}, [r9, :128]!
subs r11, r11, #1
vsub.f32 q2, q0, q15
vadd.f32 q0, q0, q15
vmul.f32 d10, d2, d17
vmul.f32 d11, d3, d16
vmul.f32 d12, d3, d17
vmul.f32 d6, d4, d17
vmul.f32 d7, d5, d16
vmul.f32 d8, d4, d16
vmul.f32 d9, d5, d17
vmul.f32 d13, d2, d16
vsub.f32 d7, d7, d6
vadd.f32 d11, d11, d10
vsub.f32 q1, q12, q11
vsub.f32 q2, q10, q9
vadd.f32 d6, d9, d8
vadd.f32 q4, q14, q13
vadd.f32 q11, q12, q11
vadd.f32 q12, q10, q9
vsub.f32 d10, d13, d12
vsub.f32 q7, q4, q0
vsub.f32 q9, q12, q11
vsub.f32 q13, q5, q3
vadd.f32 d29, d5, d2 @
vadd.f32 q5, q5, q3
vadd.f32 q10, q4, q0
vadd.f32 q11, q12, q11
vsub.f32 d31, d5, d2 @
vsub.f32 d28, d4, d3 @
vadd.f32 d30, d4, d3 @
vadd.f32 d5, d19, d14 @-
vadd.f32 d7, d31, d26 @-
vadd.f32 q1, q14, q5
vadd.f32 q0, q11, q10
vsub.f32 d6, d30, d27 @-
vsub.f32 d4, d18, d15 @-
vsub.f32 d13, d19, d14 @-
vadd.f32 d12, d18, d15 @-
vsub.f32 d15, d31, d26 @-
ldr r2, [r12], #4
vtrn.32 q1, q3
ldr lr, [r12], #4
vtrn.32 q0, q2
add r2, r0, r2, lsl #2
vsub.f32 q4, q11, q10
add lr, r0, lr, lsl #2
vsub.f32 q5, q14, q5
vadd.f32 d14, d30, d27 @-
vst2.32 {q0,q1}, [r2, :128]!
vst2.32 {q2,q3}, [lr, :128]!
vtrn.32 q4, q6
vtrn.32 q5, q7
vst2.32 {q4,q5}, [r2, :128]!
vst2.32 {q6,q7}, [lr, :128]!
bne _neon_ee_loop
@ assumes r0 = out
@
@ r12 = offsets
@ r3-r10 = data pointers
@ r11 = loop iterations
@ r2 & lr = temps
.align 4
#ifdef __APPLE__
.globl _neon_oo
_neon_oo:
#else
.globl neon_oo
neon_oo:
#endif
_neon_oo_loop:
vld2.32 {q8}, [r6, :128]!
vld2.32 {q9}, [r5, :128]!
vld2.32 {q10}, [r4, :128]!
vld2.32 {q13}, [r3, :128]!
vadd.f32 q11, q9, q8
vsub.f32 q8, q9, q8
vsub.f32 q9, q13, q10
vadd.f32 q12, q13, q10
subs r11, r11, #1
vld2.32 {q10}, [r7, :128]!
vld2.32 {q13}, [r9, :128]!
vsub.f32 q2, q12, q11
vsub.f32 d7, d19, d16 @
vadd.f32 d3, d19, d16 @
vadd.f32 d6, d18, d17 @
vsub.f32 d2, d18, d17 @
vld2.32 {q9}, [r8, :128]!
vld2.32 {q8}, [r10, :128]!
vadd.f32 q0, q12, q11
vadd.f32 q11, q13, q8
vadd.f32 q12, q10, q9
vsub.f32 q8, q13, q8
vsub.f32 q9, q10, q9
vsub.f32 q6, q12, q11
vadd.f32 q4, q12, q11
vtrn.32 q0, q2
ldr r2, [r12], #4
vsub.f32 d15, d19, d16 @
ldr lr, [r12], #4
vadd.f32 d11, d19, d16 @
vadd.f32 d14, d18, d17 @
vsub.f32 d10, d18, d17 @
add r2, r0, r2, lsl #2
vtrn.32 q1, q3
add lr, r0, lr, lsl #2
vst2.32 {q0,q1}, [r2, :128]!
vst2.32 {q2,q3}, [lr, :128]!
vtrn.32 q4, q6
vtrn.32 q5, q7
vst2.32 {q4,q5}, [r2, :128]!
vst2.32 {q6,q7}, [lr, :128]!
bne _neon_oo_loop
@ assumes r0 = out
@
@ r12 = offsets
@ r3-r10 = data pointers
@ r11 = addr of twiddle
@ r2 & lr = temps
.align 4
#ifdef __APPLE__
.globl _neon_eo
_neon_eo:
#else
.globl neon_eo
neon_eo:
#endif
vld2.32 {q9}, [r5, :128]! @tag2
vld2.32 {q13}, [r3, :128]! @tag0
vld2.32 {q12}, [r4, :128]! @tag1
vld2.32 {q0}, [r7, :128]! @tag4
vsub.f32 q11, q13, q12
vld2.32 {q8}, [r6, :128]! @tag3
vadd.f32 q12, q13, q12
vsub.f32 q10, q9, q8
vadd.f32 q8, q9, q8
vadd.f32 q9, q12, q8
vadd.f32 d9, d23, d20 @
vsub.f32 d11, d23, d20 @
vsub.f32 q8, q12, q8
vsub.f32 d8, d22, d21 @
vadd.f32 d10, d22, d21 @
ldr r2, [r12], #4
vld1.32 {d20, d21}, [r11, :128]
ldr lr, [r12], #4
vtrn.32 q9, q4
add r2, r0, r2, lsl #2
vtrn.32 q8, q5
add lr, r0, lr, lsl #2
vswp d9,d10
vst1.32 {d8,d9,d10,d11}, [lr, :128]!
vld2.32 {q13}, [r10, :128]! @tag7
vld2.32 {q15}, [r9, :128]! @tag6
vld2.32 {q11}, [r8, :128]! @tag5
vsub.f32 q14, q15, q13
vsub.f32 q12, q0, q11
vadd.f32 q11, q0, q11
vadd.f32 q13, q15, q13
vadd.f32 d13, d29, d24 @
vadd.f32 q15, q13, q11
vsub.f32 d12, d28, d25 @
vsub.f32 d15, d29, d24 @
vadd.f32 d14, d28, d25 @
vtrn.32 q15, q6
vsub.f32 q15, q13, q11
vtrn.32 q15, q7
vswp d13, d14
vst1.32 {d12,d13,d14,d15}, [lr, :128]!
vtrn.32 q13, q14
vtrn.32 q11, q12
vmul.f32 d24, d26, d21
vmul.f32 d28, d27, d20
vmul.f32 d25, d26, d20
vmul.f32 d26, d27, d21
vmul.f32 d27, d22, d21
vmul.f32 d30, d23, d20
vmul.f32 d29, d23, d21
vmul.f32 d22, d22, d20
vsub.f32 d21, d28, d24
vadd.f32 d20, d26, d25
vadd.f32 d25, d30, d27
vsub.f32 d24, d22, d29
vadd.f32 q11, q12, q10
vsub.f32 q10, q12, q10
vadd.f32 q0, q9, q11
vsub.f32 q2, q9, q11
vadd.f32 d3, d17, d20 @
vsub.f32 d7, d17, d20 @
vsub.f32 d2, d16, d21 @
vadd.f32 d6, d16, d21 @
vswp d1, d2
vswp d5, d6
vstmia r2!, {q0-q3}
@ assumes r0 = out
@
@ r12 = offsets
@ r3-r10 = data pointers
@ r11 = addr of twiddle
@ r2 & lr = temps
.align 4
#ifdef __APPLE__
.globl _neon_oe
_neon_oe:
#else
.globl neon_oe
neon_oe:
#endif
vld1.32 {q8}, [r5, :128]!
vld1.32 {q10}, [r6, :128]!
vld2.32 {q11}, [r4, :128]!
vld2.32 {q13}, [r3, :128]!
vld2.32 {q15}, [r10, :128]!
vorr d25, d17, d17
vorr d24, d20, d20
vorr d20, d16, d16
vsub.f32 q9, q13, q11
vadd.f32 q11, q13, q11
ldr r2, [r12], #4
vtrn.32 d24, d25
ldr lr, [r12], #4
vtrn.32 d20, d21
add r2, r0, r2, lsl #2
vsub.f32 q8, q10, q12
add lr, r0, lr, lsl #2
vadd.f32 q10, q10, q12
vadd.f32 q0, q11, q10
vadd.f32 d25, d19, d16 @
vsub.f32 d27, d19, d16 @
vsub.f32 q1, q11, q10
vsub.f32 d24, d18, d17 @
vadd.f32 d26, d18, d17 @
vtrn.32 q0, q12
vtrn.32 q1, q13
vld1.32 {d24, d25}, [r11, :128]
vswp d1, d2
vst1.32 {q0, q1}, [r2, :128]!
vld2.32 {q0}, [r9, :128]!
vadd.f32 q1, q0, q15
vld2.32 {q13}, [r8, :128]!
vld2.32 {q14}, [r7, :128]!
vsub.f32 q15, q0, q15
vsub.f32 q0, q14, q13
vadd.f32 q3, q14, q13
vadd.f32 q2, q3, q1
vadd.f32 d29, d1, d30 @
vsub.f32 d27, d1, d30 @
vsub.f32 q3, q3, q1
vsub.f32 d28, d0, d31 @
vadd.f32 d26, d0, d31 @
vtrn.32 q2, q14
vtrn.32 q3, q13
vswp d5, d6
vst1.32 {q2, q3}, [r2, :128]!
vtrn.32 q11, q9
vtrn.32 q10, q8
vmul.f32 d20, d18, d25
vmul.f32 d22, d19, d24
vmul.f32 d21, d19, d25
vmul.f32 d18, d18, d24
vmul.f32 d19, d16, d25
vmul.f32 d30, d17, d24
vmul.f32 d23, d16, d24
vmul.f32 d24, d17, d25
vadd.f32 d17, d22, d20
vsub.f32 d16, d18, d21
vsub.f32 d21, d30, d19
vadd.f32 d20, d24, d23
vadd.f32 q9, q8, q10
vsub.f32 q8, q8, q10
vadd.f32 q4, q14, q9
vsub.f32 q6, q14, q9
vadd.f32 d11, d27, d16 @
vsub.f32 d15, d27, d16 @
vsub.f32 d10, d26, d17 @
vadd.f32 d14, d26, d17 @
vswp d9, d10
vswp d13, d14
vstmia lr!, {q4-q7}
.align 4
#ifdef __APPLE__
.globl _neon_end
_neon_end:
#else
.globl neon_end
neon_end:
#endif
bx lr
.align 4
#ifdef __APPLE__
.globl _neon_transpose
_neon_transpose:
#else
.globl neon_transpose
neon_transpose:
#endif
push {r4-r8}
@ vpush {q8-q9}
mov r5, r3
_neon_transpose_col:
mov r7, r1
add r8, r1, r3, lsl #3
mov r4, r2
add r6, r0, r2, lsl #3
_neon_transpose_row:
vld1.32 {q8,q9}, [r0, :128]!
@ vld1.32 {q10,q11}, [r0, :128]!
vld1.32 {q12,q13}, [r6, :128]!
@ vld1.32 {q14,q15}, [r6, :128]!
sub r4, r4, #4
cmp r4, #0
vswp d17,d24
vswp d19,d26
vswp d21,d28
vswp d23,d30
vst1.32 {q8}, [r7, :128]
vst1.32 {q12}, [r8, :128]
add r7, r7, r3, lsl #4
add r8, r8, r3, lsl #4
vst1.32 {q9}, [r7, :128]
vst1.32 {q13}, [r8, :128]
add r7, r7, r3, lsl #4
add r8, r8, r3, lsl #4
@@vst1.32 {q10}, [r7, :128]
@@vst1.32 {q14}, [r8, :128]
@@add r7, r7, r3, lsl #4
@@add r8, r8, r3, lsl #4
@@vst1.32 {q11}, [r7, :128]
@@vst1.32 {q15}, [r8, :128]
@@add r7, r7, r3, lsl #4
@@add r8, r8, r3, lsl #4
bne _neon_transpose_row
sub r5, r5, #2
cmp r5, #0
add r0, r0, r2, lsl #3
add r1, r1, #16
bne _neon_transpose_col
@ vpop {q8-q9}
pop {r4-r8}
bx lr
.align 4
#ifdef __APPLE__
.globl _neon_transpose_to_buf
_neon_transpose_to_buf:
#else
.globl neon_transpose_to_buf
neon_transpose_to_buf:
#endif
push {r4-r10}
mov r5, #8
_neon_transpose_to_buf_col:
mov r4, #8
add r6, r0, r2, lsl #3
mov r7, r1
add r8, r1, #64
add r9, r1, #128
add r10, r1, #192
_neon_transpose_to_buf_row:
vld1.32 {q8,q9}, [r0, :128]!
vld1.32 {q12,q13}, [r6, :128]!
sub r4, r4, #4
cmp r4, #0
vswp d17,d24
vswp d19,d26
vst1.32 {q8}, [r7, :128]
vst1.32 {q12}, [r8, :128]
vst1.32 {q9}, [r9, :128]
vst1.32 {q13}, [r10, :128]
add r7, r7, #256
add r8, r8, #256
add r9, r9, #256
add r10, r10, #256
bne _neon_transpose_to_buf_row
sub r5, r5, #2
cmp r5, #0
sub r0, r0, #64
add r0, r0, r2, lsl #4
add r1, r1, #16
bne _neon_transpose_to_buf_col
pop {r4-r10}
bx lr

1127
3rdparty/ffts/ffts-master/src/neon_float.h vendored Executable file

File diff suppressed because it is too large Load Diff

956
3rdparty/ffts/ffts-master/src/neon_static_f.s vendored Executable file
View File

@@ -0,0 +1,956 @@
/*
This file is part of FFTS -- The Fastest Fourier Transform in the South
Copyright (c) 2012, Anthony M. Blake <amb@anthonix.com>
Copyright (c) 2012, The University of Waikato
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.
*/
.align 4
#ifdef __APPLE__
.globl _neon_static_e_f
_neon_static_e_f:
#else
.globl neon_static_e_f
neon_static_e_f:
#endif
push {r4, r5, r6, r7, r8, r9, r10, r11, lr}
vstmdb sp!, {d8-d15}
ldr lr, [r0, #40] @ this is p->N
add r3, r1, #0
add r7, r1, lr
add r5, r7, lr
add r10, r5, lr
add r4, r10, lr
add r8, r4, lr
add r6, r8, lr
add r9, r6, lr
ldr r12, [r0]
add r1, r0, #0
add r0, r2, #0
ldr r2, [r1, #16] @ this is p->ee_ws
ldr r11, [r1, #28] @ this is p->i0
vld1.32 {d16, d17}, [r2, :128]
_neon_ee_loop:
vld2.32 {q15}, [r10, :128]!
vld2.32 {q13}, [r8, :128]!
vld2.32 {q14}, [r7, :128]!
vld2.32 {q9}, [r4, :128]!
vld2.32 {q10}, [r3, :128]!
vld2.32 {q11}, [r6, :128]!
vld2.32 {q12}, [r5, :128]!
vsub.f32 q1, q14, q13
vld2.32 {q0}, [r9, :128]!
subs r11, r11, #1
vsub.f32 q2, q0, q15
vadd.f32 q0, q0, q15
vmul.f32 d10, d2, d17
vmul.f32 d11, d3, d16
vmul.f32 d12, d3, d17
vmul.f32 d6, d4, d17
vmul.f32 d7, d5, d16
vmul.f32 d8, d4, d16
vmul.f32 d9, d5, d17
vmul.f32 d13, d2, d16
vsub.f32 d7, d7, d6
vadd.f32 d11, d11, d10
vsub.f32 q1, q12, q11
vsub.f32 q2, q10, q9
vadd.f32 d6, d9, d8
vadd.f32 q4, q14, q13
vadd.f32 q11, q12, q11
vadd.f32 q12, q10, q9
vsub.f32 d10, d13, d12
vsub.f32 q7, q4, q0
vsub.f32 q9, q12, q11
vsub.f32 q13, q5, q3
vsub.f32 d29, d5, d2 @
vadd.f32 q5, q5, q3
vadd.f32 q10, q4, q0
vadd.f32 q11, q12, q11
vadd.f32 d31, d5, d2 @
vadd.f32 d28, d4, d3 @
vsub.f32 d30, d4, d3 @
vsub.f32 d5, d19, d14 @
vsub.f32 d7, d31, d26 @
vadd.f32 q1, q14, q5
vadd.f32 q0, q11, q10
vadd.f32 d6, d30, d27 @
vadd.f32 d4, d18, d15 @
vadd.f32 d13, d19, d14 @
vsub.f32 d12, d18, d15 @
vadd.f32 d15, d31, d26 @
ldr r2, [r12], #4
vtrn.32 q1, q3
ldr lr, [r12], #4
vtrn.32 q0, q2
add r2, r0, r2, lsl #2
vsub.f32 q4, q11, q10
add lr, r0, lr, lsl #2
vsub.f32 q5, q14, q5
vsub.f32 d14, d30, d27 @
vst2.32 {q0,q1}, [r2, :128]!
vst2.32 {q2,q3}, [lr, :128]!
vtrn.32 q4, q6
vtrn.32 q5, q7
vst2.32 {q4,q5}, [r2, :128]!
vst2.32 {q6,q7}, [lr, :128]!
bne _neon_ee_loop
ldr r11, [r1, #12]
vld2.32 {q9}, [r5, :128]! @tag2
vld2.32 {q13}, [r3, :128]! @tag0
vld2.32 {q12}, [r4, :128]! @tag1
vld2.32 {q0}, [r7, :128]! @tag4
vsub.f32 q11, q13, q12
vld2.32 {q8}, [r6, :128]! @tag3
vadd.f32 q12, q13, q12
vsub.f32 q10, q9, q8
vadd.f32 q8, q9, q8
vadd.f32 q9, q12, q8
vsub.f32 d9, d23, d20 @
vadd.f32 d11, d23, d20 @
vsub.f32 q8, q12, q8
vadd.f32 d8, d22, d21 @
vsub.f32 d10, d22, d21 @
ldr r2, [r12], #4
vld1.32 {d20, d21}, [r11, :128]
ldr lr, [r12], #4
vtrn.32 q9, q4
add r2, r0, r2, lsl #2
vtrn.32 q8, q5
add lr, r0, lr, lsl #2
vswp d9,d10
vst1.32 {d8,d9,d10,d11}, [lr, :128]!
vld2.32 {q13}, [r10, :128]! @tag7
vld2.32 {q15}, [r9, :128]! @tag6
vld2.32 {q11}, [r8, :128]! @tag5
vsub.f32 q14, q15, q13
vsub.f32 q12, q0, q11
vadd.f32 q11, q0, q11
vadd.f32 q13, q15, q13
vsub.f32 d13, d29, d24 @
vadd.f32 q15, q13, q11
vadd.f32 d12, d28, d25 @
vadd.f32 d15, d29, d24 @
vsub.f32 d14, d28, d25 @
vtrn.32 q15, q6
vsub.f32 q15, q13, q11
vtrn.32 q15, q7
vswp d13, d14
vst1.32 {d12,d13,d14,d15}, [lr, :128]!
vtrn.32 q13, q14
vtrn.32 q11, q12
vmul.f32 d24, d26, d21
vmul.f32 d28, d27, d20
vmul.f32 d25, d26, d20
vmul.f32 d26, d27, d21
vmul.f32 d27, d22, d21
vmul.f32 d30, d23, d20
vmul.f32 d29, d23, d21
vmul.f32 d22, d22, d20
vsub.f32 d21, d28, d24
vadd.f32 d20, d26, d25
vadd.f32 d25, d30, d27
vsub.f32 d24, d22, d29
vadd.f32 q11, q12, q10
vsub.f32 q10, q12, q10
vadd.f32 q0, q9, q11
vsub.f32 q2, q9, q11
vsub.f32 d3, d17, d20 @
vadd.f32 d7, d17, d20 @
vadd.f32 d2, d16, d21 @
vsub.f32 d6, d16, d21 @
vswp d1, d2
vswp d5, d6
vstmia r2!, {q0-q3}
add r2, r7, #0
add r7, r9, #0
add r9, r2, #0
add r2, r8, #0
add r8, r10, #0
add r10, r2, #0
ldr r11, [r1, #32] @ this is p->i1
cmp r11, #0
beq _neon_oo_loop_exit
_neon_oo_loop:
vld2.32 {q8}, [r6, :128]!
vld2.32 {q9}, [r5, :128]!
vld2.32 {q10}, [r4, :128]!
vld2.32 {q13}, [r3, :128]!
vadd.f32 q11, q9, q8
vsub.f32 q8, q9, q8
vsub.f32 q9, q13, q10
vadd.f32 q12, q13, q10
subs r11, r11, #1
vld2.32 {q10}, [r7, :128]!
vld2.32 {q13}, [r9, :128]!
vsub.f32 q2, q12, q11
vadd.f32 d7, d19, d16 @
vsub.f32 d3, d19, d16 @
vsub.f32 d6, d18, d17 @
vadd.f32 d2, d18, d17 @
vld2.32 {q9}, [r8, :128]!
vld2.32 {q8}, [r10, :128]!
vadd.f32 q0, q12, q11
vadd.f32 q11, q13, q8
vadd.f32 q12, q10, q9
vsub.f32 q8, q13, q8
vsub.f32 q9, q10, q9
vsub.f32 q6, q12, q11
vadd.f32 q4, q12, q11
vtrn.32 q0, q2
ldr r2, [r12], #4
vadd.f32 d15, d19, d16 @
ldr lr, [r12], #4
vsub.f32 d11, d19, d16 @
vsub.f32 d14, d18, d17 @
vadd.f32 d10, d18, d17 @
add r2, r0, r2, lsl #2
vtrn.32 q1, q3
add lr, r0, lr, lsl #2
vst2.32 {q0,q1}, [r2, :128]!
vst2.32 {q2,q3}, [lr, :128]!
vtrn.32 q4, q6
vtrn.32 q5, q7
vst2.32 {q4,q5}, [r2, :128]!
vst2.32 {q6,q7}, [lr, :128]!
bne _neon_oo_loop
_neon_oo_loop_exit:
add r2, r3, #0
add r3, r7, #0
add r7, r2, #0
add r2, r4, #0
add r4, r8, #0
add r8, r2, #0
add r2, r5, #0
add r5, r9, #0
add r9, r2, #0
add r2, r6, #0
add r6, r10, #0
add r10, r2, #0
add r2, r9, #0
add r9, r10, #0
add r10, r2, #0
ldr r2, [r1, #16]
ldr r11, [r1, #32] @ this is p->i1
cmp r11, #0
beq _neon_ee_loop2_exit
vld1.32 {d16, d17}, [r2, :128]
_neon_ee_loop2:
vld2.32 {q15}, [r10, :128]!
vld2.32 {q13}, [r8, :128]!
vld2.32 {q14}, [r7, :128]!
vld2.32 {q9}, [r4, :128]!
vld2.32 {q10}, [r3, :128]!
vld2.32 {q11}, [r6, :128]!
vld2.32 {q12}, [r5, :128]!
vsub.f32 q1, q14, q13
vld2.32 {q0}, [r9, :128]!
subs r11, r11, #1
vsub.f32 q2, q0, q15
vadd.f32 q0, q0, q15
vmul.f32 d10, d2, d17
vmul.f32 d11, d3, d16
vmul.f32 d12, d3, d17
vmul.f32 d6, d4, d17
vmul.f32 d7, d5, d16
vmul.f32 d8, d4, d16
vmul.f32 d9, d5, d17
vmul.f32 d13, d2, d16
vsub.f32 d7, d7, d6
vadd.f32 d11, d11, d10
vsub.f32 q1, q12, q11
vsub.f32 q2, q10, q9
vadd.f32 d6, d9, d8
vadd.f32 q4, q14, q13
vadd.f32 q11, q12, q11
vadd.f32 q12, q10, q9
vsub.f32 d10, d13, d12
vsub.f32 q7, q4, q0
vsub.f32 q9, q12, q11
vsub.f32 q13, q5, q3
vsub.f32 d29, d5, d2 @
vadd.f32 q5, q5, q3
vadd.f32 q10, q4, q0
vadd.f32 q11, q12, q11
vadd.f32 d31, d5, d2 @
vadd.f32 d28, d4, d3 @
vsub.f32 d30, d4, d3 @
vsub.f32 d5, d19, d14 @
vsub.f32 d7, d31, d26 @
vadd.f32 q1, q14, q5
vadd.f32 q0, q11, q10
vadd.f32 d6, d30, d27 @
vadd.f32 d4, d18, d15 @
vadd.f32 d13, d19, d14 @
vsub.f32 d12, d18, d15 @
vadd.f32 d15, d31, d26 @
ldr r2, [r12], #4
vtrn.32 q1, q3
ldr lr, [r12], #4
vtrn.32 q0, q2
add r2, r0, r2, lsl #2
vsub.f32 q4, q11, q10
add lr, r0, lr, lsl #2
vsub.f32 q5, q14, q5
vsub.f32 d14, d30, d27 @
vst2.32 {q0,q1}, [r2, :128]!
vst2.32 {q2,q3}, [lr, :128]!
vtrn.32 q4, q6
vtrn.32 q5, q7
vst2.32 {q4,q5}, [r2, :128]!
vst2.32 {q6,q7}, [lr, :128]!
bne _neon_ee_loop2
_neon_ee_loop2_exit:
vldmia sp!, {d8-d15}
pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}
.align 4
#ifdef __APPLE__
.globl _neon_static_o_f
_neon_static_o_f:
#else
.globl neon_static_o_f
neon_static_o_f:
#endif
push {r4, r5, r6, r7, r8, r9, r10, r11, lr}
vstmdb sp!, {d8-d15}
ldr lr, [r0, #40] @ this is p->N
add r3, r1, #0
add r7, r1, lr
add r5, r7, lr
add r10, r5, lr
add r4, r10, lr
add r8, r4, lr
add r6, r8, lr
add r9, r6, lr
ldr r12, [r0]
add r1, r0, #0
add r0, r2, #0
ldr r2, [r1, #16] @ this is p->ee_ws
ldr r11, [r1, #28] @ this is p->i0
vld1.32 {d16, d17}, [r2, :128]
_neon_ee_o_loop:
vld2.32 {q15}, [r10, :128]!
vld2.32 {q13}, [r8, :128]!
vld2.32 {q14}, [r7, :128]!
vld2.32 {q9}, [r4, :128]!
vld2.32 {q10}, [r3, :128]!
vld2.32 {q11}, [r6, :128]!
vld2.32 {q12}, [r5, :128]!
vsub.f32 q1, q14, q13
vld2.32 {q0}, [r9, :128]!
subs r11, r11, #1
vsub.f32 q2, q0, q15
vadd.f32 q0, q0, q15
vmul.f32 d10, d2, d17
vmul.f32 d11, d3, d16
vmul.f32 d12, d3, d17
vmul.f32 d6, d4, d17
vmul.f32 d7, d5, d16
vmul.f32 d8, d4, d16
vmul.f32 d9, d5, d17
vmul.f32 d13, d2, d16
vsub.f32 d7, d7, d6
vadd.f32 d11, d11, d10
vsub.f32 q1, q12, q11
vsub.f32 q2, q10, q9
vadd.f32 d6, d9, d8
vadd.f32 q4, q14, q13
vadd.f32 q11, q12, q11
vadd.f32 q12, q10, q9
vsub.f32 d10, d13, d12
vsub.f32 q7, q4, q0
vsub.f32 q9, q12, q11
vsub.f32 q13, q5, q3
vsub.f32 d29, d5, d2 @
vadd.f32 q5, q5, q3
vadd.f32 q10, q4, q0
vadd.f32 q11, q12, q11
vadd.f32 d31, d5, d2 @
vadd.f32 d28, d4, d3 @
vsub.f32 d30, d4, d3 @
vsub.f32 d5, d19, d14 @
vsub.f32 d7, d31, d26 @
vadd.f32 q1, q14, q5
vadd.f32 q0, q11, q10
vadd.f32 d6, d30, d27 @
vadd.f32 d4, d18, d15 @
vadd.f32 d13, d19, d14 @
vsub.f32 d12, d18, d15 @
vadd.f32 d15, d31, d26 @
ldr r2, [r12], #4
vtrn.32 q1, q3
ldr lr, [r12], #4
vtrn.32 q0, q2
add r2, r0, r2, lsl #2
vsub.f32 q4, q11, q10
add lr, r0, lr, lsl #2
vsub.f32 q5, q14, q5
vsub.f32 d14, d30, d27 @
vst2.32 {q0,q1}, [r2, :128]!
vst2.32 {q2,q3}, [lr, :128]!
vtrn.32 q4, q6
vtrn.32 q5, q7
vst2.32 {q4,q5}, [r2, :128]!
vst2.32 {q6,q7}, [lr, :128]!
bne _neon_ee_o_loop
add r2, r7, #0
add r7, r9, #0
add r9, r2, #0
add r2, r8, #0
add r8, r10, #0
add r10, r2, #0
ldr r11, [r1, #32] @ this is p->i1
cmp r11, #0
beq _neon_oo_o_loop_exit
_neon_oo_o_loop:
vld2.32 {q8}, [r6, :128]!
vld2.32 {q9}, [r5, :128]!
vld2.32 {q10}, [r4, :128]!
vld2.32 {q13}, [r3, :128]!
vadd.f32 q11, q9, q8
vsub.f32 q8, q9, q8
vsub.f32 q9, q13, q10
vadd.f32 q12, q13, q10
subs r11, r11, #1
vld2.32 {q10}, [r7, :128]!
vld2.32 {q13}, [r9, :128]!
vsub.f32 q2, q12, q11
vadd.f32 d7, d19, d16 @
vsub.f32 d3, d19, d16 @
vsub.f32 d6, d18, d17 @
vadd.f32 d2, d18, d17 @
vld2.32 {q9}, [r8, :128]!
vld2.32 {q8}, [r10, :128]!
vadd.f32 q0, q12, q11
vadd.f32 q11, q13, q8
vadd.f32 q12, q10, q9
vsub.f32 q8, q13, q8
vsub.f32 q9, q10, q9
vsub.f32 q6, q12, q11
vadd.f32 q4, q12, q11
vtrn.32 q0, q2
ldr r2, [r12], #4
vadd.f32 d15, d19, d16 @
ldr lr, [r12], #4
vsub.f32 d11, d19, d16 @
vsub.f32 d14, d18, d17 @
vadd.f32 d10, d18, d17 @
add r2, r0, r2, lsl #2
vtrn.32 q1, q3
add lr, r0, lr, lsl #2
vst2.32 {q0,q1}, [r2, :128]!
vst2.32 {q2,q3}, [lr, :128]!
vtrn.32 q4, q6
vtrn.32 q5, q7
vst2.32 {q4,q5}, [r2, :128]!
vst2.32 {q6,q7}, [lr, :128]!
bne _neon_oo_o_loop
_neon_oo_o_loop_exit:
ldr r11, [r1, #8]
vld1.32 {q8}, [r5, :128]!
vld1.32 {q10}, [r6, :128]!
vld2.32 {q11}, [r4, :128]!
vld2.32 {q13}, [r3, :128]!
vld2.32 {q15}, [r10, :128]!
vorr d25, d17, d17
vorr d24, d20, d20
vorr d20, d16, d16
vsub.f32 q9, q13, q11
vadd.f32 q11, q13, q11
ldr r2, [r12], #4
vtrn.32 d24, d25
ldr lr, [r12], #4
vtrn.32 d20, d21
add r2, r0, r2, lsl #2
vsub.f32 q8, q10, q12
add lr, r0, lr, lsl #2
vadd.f32 q10, q10, q12
vadd.f32 q0, q11, q10
vsub.f32 d25, d19, d16 @
vadd.f32 d27, d19, d16 @
vsub.f32 q1, q11, q10
vadd.f32 d24, d18, d17 @
vsub.f32 d26, d18, d17 @
vtrn.32 q0, q12
vtrn.32 q1, q13
vld1.32 {d24, d25}, [r11, :128]
vswp d1, d2
vst1.32 {q0, q1}, [r2, :128]!
vld2.32 {q0}, [r9, :128]!
vadd.f32 q1, q0, q15
vld2.32 {q13}, [r8, :128]!
vld2.32 {q14}, [r7, :128]!
vsub.f32 q15, q0, q15
vsub.f32 q0, q14, q13
vadd.f32 q3, q14, q13
vadd.f32 q2, q3, q1
vsub.f32 d29, d1, d30 @
vadd.f32 d27, d1, d30 @
vsub.f32 q3, q3, q1
vadd.f32 d28, d0, d31 @
vsub.f32 d26, d0, d31 @
vtrn.32 q2, q14
vtrn.32 q3, q13
vswp d5, d6
vst1.32 {q2, q3}, [r2, :128]!
vtrn.32 q11, q9
vtrn.32 q10, q8
vmul.f32 d20, d18, d25
vmul.f32 d22, d19, d24
vmul.f32 d21, d19, d25
vmul.f32 d18, d18, d24
vmul.f32 d19, d16, d25
vmul.f32 d30, d17, d24
vmul.f32 d23, d16, d24
vmul.f32 d24, d17, d25
vadd.f32 d17, d22, d20
vsub.f32 d16, d18, d21
vsub.f32 d21, d30, d19
vadd.f32 d20, d24, d23
vadd.f32 q9, q8, q10
vsub.f32 q8, q8, q10
vadd.f32 q4, q14, q9
vsub.f32 q6, q14, q9
vsub.f32 d11, d27, d16 @
vadd.f32 d15, d27, d16 @
vadd.f32 d10, d26, d17 @
vsub.f32 d14, d26, d17 @
vswp d9, d10
vswp d13, d14
vstmia lr!, {q4-q7}
add r2, r3, #0
add r3, r7, #0
add r7, r2, #0
add r2, r4, #0
add r4, r8, #0
add r8, r2, #0
add r2, r5, #0
add r5, r9, #0
add r9, r2, #0
add r2, r6, #0
add r6, r10, #0
add r10, r2, #0
add r2, r9, #0
add r9, r10, #0
add r10, r2, #0
ldr r2, [r1, #16]
ldr r11, [r1, #32] @ this is p->i1
cmp r11, #0
beq _neon_ee_o_loop2_exit
vld1.32 {d16, d17}, [r2, :128]
_neon_ee_o_loop2:
vld2.32 {q15}, [r10, :128]!
vld2.32 {q13}, [r8, :128]!
vld2.32 {q14}, [r7, :128]!
vld2.32 {q9}, [r4, :128]!
vld2.32 {q10}, [r3, :128]!
vld2.32 {q11}, [r6, :128]!
vld2.32 {q12}, [r5, :128]!
vsub.f32 q1, q14, q13
vld2.32 {q0}, [r9, :128]!
subs r11, r11, #1
vsub.f32 q2, q0, q15
vadd.f32 q0, q0, q15
vmul.f32 d10, d2, d17
vmul.f32 d11, d3, d16
vmul.f32 d12, d3, d17
vmul.f32 d6, d4, d17
vmul.f32 d7, d5, d16
vmul.f32 d8, d4, d16
vmul.f32 d9, d5, d17
vmul.f32 d13, d2, d16
vsub.f32 d7, d7, d6
vadd.f32 d11, d11, d10
vsub.f32 q1, q12, q11
vsub.f32 q2, q10, q9
vadd.f32 d6, d9, d8
vadd.f32 q4, q14, q13
vadd.f32 q11, q12, q11
vadd.f32 q12, q10, q9
vsub.f32 d10, d13, d12
vsub.f32 q7, q4, q0
vsub.f32 q9, q12, q11
vsub.f32 q13, q5, q3
vsub.f32 d29, d5, d2 @
vadd.f32 q5, q5, q3
vadd.f32 q10, q4, q0
vadd.f32 q11, q12, q11
vadd.f32 d31, d5, d2 @
vadd.f32 d28, d4, d3 @
vsub.f32 d30, d4, d3 @
vsub.f32 d5, d19, d14 @
vsub.f32 d7, d31, d26 @
vadd.f32 q1, q14, q5
vadd.f32 q0, q11, q10
vadd.f32 d6, d30, d27 @
vadd.f32 d4, d18, d15 @
vadd.f32 d13, d19, d14 @
vsub.f32 d12, d18, d15 @
vadd.f32 d15, d31, d26 @
ldr r2, [r12], #4
vtrn.32 q1, q3
ldr lr, [r12], #4
vtrn.32 q0, q2
add r2, r0, r2, lsl #2
vsub.f32 q4, q11, q10
add lr, r0, lr, lsl #2
vsub.f32 q5, q14, q5
vsub.f32 d14, d30, d27 @
vst2.32 {q0,q1}, [r2, :128]!
vst2.32 {q2,q3}, [lr, :128]!
vtrn.32 q4, q6
vtrn.32 q5, q7
vst2.32 {q4,q5}, [r2, :128]!
vst2.32 {q6,q7}, [lr, :128]!
bne _neon_ee_o_loop2
_neon_ee_o_loop2_exit:
vldmia sp!, {d8-d15}
pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}
.align 4
#ifdef __APPLE__
.globl _neon_static_x4_f
_neon_static_x4_f:
#else
.globl neon_static_x4_f
neon_static_x4_f:
#endif
@ add r3, r0, #0
push {r4, r5, r6, lr}
vstmdb sp!, {d8-d15}
vld1.32 {q8,q9}, [r0, :128]
add r4, r0, r1, lsl #1
vld1.32 {q10,q11}, [r4, :128]
add r5, r0, r1, lsl #2
vld1.32 {q12,q13}, [r5, :128]
add r6, r4, r1, lsl #2
vld1.32 {q14,q15}, [r6, :128]
vld1.32 {q2,q3}, [r2, :128]
vmul.f32 q0, q13, q3
vmul.f32 q5, q12, q2
vmul.f32 q1, q14, q2
vmul.f32 q4, q14, q3
vmul.f32 q14, q12, q3
vmul.f32 q13, q13, q2
vmul.f32 q12, q15, q3
vmul.f32 q2, q15, q2
vsub.f32 q0, q5, q0
vadd.f32 q13, q13, q14
vadd.f32 q12, q12, q1
vsub.f32 q1, q2, q4
vadd.f32 q15, q0, q12
vsub.f32 q12, q0, q12
vadd.f32 q14, q13, q1
vsub.f32 q13, q13, q1
vadd.f32 q0, q8, q15
vadd.f32 q1, q9, q14
vadd.f32 q2, q10, q13 @
vsub.f32 q4, q8, q15
vsub.f32 q3, q11, q12 @
vst1.32 {q0,q1}, [r0, :128]
vsub.f32 q5, q9, q14
vsub.f32 q6, q10, q13 @
vadd.f32 q7, q11, q12 @
vst1.32 {q2,q3}, [r4, :128]
vst1.32 {q4,q5}, [r5, :128]
vst1.32 {q6,q7}, [r6, :128]
vldmia sp!, {d8-d15}
pop {r4, r5, r6, pc}
.align 4
#ifdef __APPLE__
.globl _neon_static_x8_f
_neon_static_x8_f:
#else
.globl neon_static_x8_f
neon_static_x8_f:
#endif
push {r4, r5, r6, r7, r8, r9, r10, r11, lr}
vstmdb sp!, {d8-d15}
mov r11, #0
add r3, r0, #0 @ data0
add r5, r0, r1, lsl #1 @ data2
add r4, r0, r1 @ data1
add r7, r5, r1, lsl #1 @ data4
add r6, r5, r1 @ data3
add r9, r7, r1, lsl #1 @ data6
add r8, r7, r1 @ data5
add r10, r9, r1 @ data7
add r12, r2, #0 @ LUT
sub r11, r11, r1, lsr #5
neon_x8_loop:
vld1.32 {q2,q3}, [r12, :128]!
vld1.32 {q14,q15}, [r6, :128]
vld1.32 {q10,q11}, [r5, :128]
adds r11, r11, #1
vmul.f32 q12, q15, q2
vmul.f32 q8, q14, q3
vmul.f32 q13, q14, q2
vmul.f32 q9, q10, q3
vmul.f32 q1, q10, q2
vmul.f32 q0, q11, q2
vmul.f32 q14, q11, q3
vmul.f32 q15, q15, q3
vld1.32 {q2,q3}, [r12, :128]!
vsub.f32 q10, q12, q8
vadd.f32 q11, q0, q9
vadd.f32 q8, q15, q13
vld1.32 {q12,q13}, [r4, :128]
vsub.f32 q9, q1, q14
vsub.f32 q15, q11, q10
vsub.f32 q14, q9, q8
vadd.f32 q4, q12, q15 @
vsub.f32 q6, q12, q15 @
vsub.f32 q5, q13, q14 @
vadd.f32 q7, q13, q14 @
vld1.32 {q14,q15}, [r9, :128]
vld1.32 {q12,q13}, [r7, :128]
vmul.f32 q1, q14, q2
vmul.f32 q0, q14, q3
vst1.32 {q4,q5}, [r4, :128]
vmul.f32 q14, q15, q3
vmul.f32 q4, q15, q2
vadd.f32 q15, q9, q8
vst1.32 {q6,q7}, [r6, :128]
vmul.f32 q8, q12, q3
vmul.f32 q5, q13, q3
vmul.f32 q12, q12, q2
vmul.f32 q9, q13, q2
vadd.f32 q14, q14, q1
vsub.f32 q13, q4, q0
vadd.f32 q0, q9, q8
vld1.32 {q8,q9}, [r3, :128]
vadd.f32 q1, q11, q10
vsub.f32 q12, q12, q5
vadd.f32 q11, q8, q15
vsub.f32 q8, q8, q15
vadd.f32 q2, q12, q14
vsub.f32 q10, q0, q13
vadd.f32 q15, q0, q13
vadd.f32 q13, q9, q1
vsub.f32 q9, q9, q1
vsub.f32 q12, q12, q14
vadd.f32 q0, q11, q2
vadd.f32 q1, q13, q15
vsub.f32 q4, q11, q2
vadd.f32 q2, q8, q10 @
vsub.f32 q3, q9, q12 @
vst1.32 {q0,q1}, [r3, :128]!
vsub.f32 q5, q13, q15
vld1.32 {q14,q15}, [r10, :128]
vadd.f32 q7, q9, q12 @
vld1.32 {q12,q13}, [r8, :128]
vst1.32 {q2,q3}, [r5, :128]!
vld1.32 {q2,q3}, [r12, :128]!
vsub.f32 q6, q8, q10 @
vmul.f32 q8, q14, q2
vst1.32 {q4,q5}, [r7, :128]!
vmul.f32 q10, q15, q3
vmul.f32 q9, q13, q3
vmul.f32 q11, q12, q2
vmul.f32 q14, q14, q3
vst1.32 {q6,q7}, [r9, :128]!
vmul.f32 q15, q15, q2
vmul.f32 q12, q12, q3
vmul.f32 q13, q13, q2
vadd.f32 q10, q10, q8
vsub.f32 q11, q11, q9
vld1.32 {q8,q9}, [r4, :128]
vsub.f32 q14, q15, q14
vadd.f32 q15, q13, q12
vadd.f32 q13, q11, q10
vadd.f32 q12, q15, q14
vsub.f32 q15, q15, q14
vsub.f32 q14, q11, q10
vld1.32 {q10,q11}, [r6, :128]
vadd.f32 q0, q8, q13
vadd.f32 q1, q9, q12
vadd.f32 q2, q10, q15 @
vsub.f32 q3, q11, q14 @
vsub.f32 q4, q8, q13
vst1.32 {q0,q1}, [r4, :128]!
vsub.f32 q5, q9, q12
vsub.f32 q6, q10, q15 @
vst1.32 {q2,q3}, [r6, :128]!
vadd.f32 q7, q11, q14 @
vst1.32 {q4,q5}, [r8, :128]!
vst1.32 {q6,q7}, [r10, :128]!
bne neon_x8_loop
vldmia sp!, {d8-d15}
pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}
.align 4
#ifdef __APPLE__
.globl _neon_static_x8_t_f
_neon_static_x8_t_f:
#else
.globl neon_static_x8_t_f
neon_static_x8_t_f:
#endif
push {r4, r5, r6, r7, r8, r9, r10, r11, lr}
vstmdb sp!, {d8-d15}
mov r11, #0
add r3, r0, #0 @ data0
add r5, r0, r1, lsl #1 @ data2
add r4, r0, r1 @ data1
add r7, r5, r1, lsl #1 @ data4
add r6, r5, r1 @ data3
add r9, r7, r1, lsl #1 @ data6
add r8, r7, r1 @ data5
add r10, r9, r1 @ data7
add r12, r2, #0 @ LUT
sub r11, r11, r1, lsr #5
neon_x8_t_loop:
vld1.32 {q2,q3}, [r12, :128]!
vld1.32 {q14,q15}, [r6, :128]
vld1.32 {q10,q11}, [r5, :128]
adds r11, r11, #1
vmul.f32 q12, q15, q2
vmul.f32 q8, q14, q3
vmul.f32 q13, q14, q2
vmul.f32 q9, q10, q3
vmul.f32 q1, q10, q2
vmul.f32 q0, q11, q2
vmul.f32 q14, q11, q3
vmul.f32 q15, q15, q3
vld1.32 {q2,q3}, [r12, :128]!
vsub.f32 q10, q12, q8
vadd.f32 q11, q0, q9
vadd.f32 q8, q15, q13
vld1.32 {q12,q13}, [r4, :128]
vsub.f32 q9, q1, q14
vsub.f32 q15, q11, q10
vsub.f32 q14, q9, q8
vadd.f32 q4, q12, q15 @
vsub.f32 q6, q12, q15 @
vsub.f32 q5, q13, q14 @
vadd.f32 q7, q13, q14 @
vld1.32 {q14,q15}, [r9, :128]
vld1.32 {q12,q13}, [r7, :128]
vmul.f32 q1, q14, q2
vmul.f32 q0, q14, q3
vst1.32 {q4,q5}, [r4, :128]
vmul.f32 q14, q15, q3
vmul.f32 q4, q15, q2
vadd.f32 q15, q9, q8
vst1.32 {q6,q7}, [r6, :128]
vmul.f32 q8, q12, q3
vmul.f32 q5, q13, q3
vmul.f32 q12, q12, q2
vmul.f32 q9, q13, q2
vadd.f32 q14, q14, q1
vsub.f32 q13, q4, q0
vadd.f32 q0, q9, q8
vld1.32 {q8,q9}, [r3, :128]
vadd.f32 q1, q11, q10
vsub.f32 q12, q12, q5
vadd.f32 q11, q8, q15
vsub.f32 q8, q8, q15
vadd.f32 q2, q12, q14
vsub.f32 q10, q0, q13
vadd.f32 q15, q0, q13
vadd.f32 q13, q9, q1
vsub.f32 q9, q9, q1
vsub.f32 q12, q12, q14
vadd.f32 q0, q11, q2
vadd.f32 q1, q13, q15
vsub.f32 q4, q11, q2
vadd.f32 q2, q8, q10 @
vsub.f32 q3, q9, q12 @
vst2.32 {q0,q1}, [r3, :128]!
vsub.f32 q5, q13, q15
vld1.32 {q14,q15}, [r10, :128]
vadd.f32 q7, q9, q12 @
vld1.32 {q12,q13}, [r8, :128]
vst2.32 {q2,q3}, [r5, :128]!
vld1.32 {q2,q3}, [r12, :128]!
vsub.f32 q6, q8, q10 @
vmul.f32 q8, q14, q2
vst2.32 {q4,q5}, [r7, :128]!
vmul.f32 q10, q15, q3
vmul.f32 q9, q13, q3
vmul.f32 q11, q12, q2
vmul.f32 q14, q14, q3
vst2.32 {q6,q7}, [r9, :128]!
vmul.f32 q15, q15, q2
vmul.f32 q12, q12, q3
vmul.f32 q13, q13, q2
vadd.f32 q10, q10, q8
vsub.f32 q11, q11, q9
vld1.32 {q8,q9}, [r4, :128]
vsub.f32 q14, q15, q14
vadd.f32 q15, q13, q12
vadd.f32 q13, q11, q10
vadd.f32 q12, q15, q14
vsub.f32 q15, q15, q14
vsub.f32 q14, q11, q10
vld1.32 {q10,q11}, [r6, :128]
vadd.f32 q0, q8, q13
vadd.f32 q1, q9, q12
vadd.f32 q2, q10, q15 @
vsub.f32 q3, q11, q14 @
vsub.f32 q4, q8, q13
vst2.32 {q0,q1}, [r4, :128]!
vsub.f32 q5, q9, q12
vsub.f32 q6, q10, q15 @
vst2.32 {q2,q3}, [r6, :128]!
vadd.f32 q7, q11, q14 @
vst2.32 {q4,q5}, [r8, :128]!
vst2.32 {q6,q7}, [r10, :128]!
bne neon_x8_t_loop
vldmia sp!, {d8-d15}
pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}

955
3rdparty/ffts/ffts-master/src/neon_static_i.s vendored Executable file
View File

@@ -0,0 +1,955 @@
/*
This file is part of FFTS -- The Fastest Fourier Transform in the South
Copyright (c) 2012, Anthony M. Blake <amb@anthonix.com>
Copyright (c) 2012, The University of Waikato
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.
*/
.align 4
#ifdef __APPLE__
.globl _neon_static_e_i
_neon_static_e_i:
#else
.globl neon_static_e_i
neon_static_e_i:
#endif
push {r4, r5, r6, r7, r8, r9, r10, r11, lr}
vstmdb sp!, {d8-d15}
ldr lr, [r0, #40] @ this is p->N
add r3, r1, #0
add r7, r1, lr
add r5, r7, lr
add r10, r5, lr
add r4, r10, lr
add r8, r4, lr
add r6, r8, lr
add r9, r6, lr
ldr r12, [r0]
add r1, r0, #0
add r0, r2, #0
ldr r2, [r1, #16] @ this is p->ee_ws
ldr r11, [r1, #28] @ this is p->i0
vld1.32 {d16, d17}, [r2, :128]
_neon_ee_loop:
vld2.32 {q15}, [r10, :128]!
vld2.32 {q13}, [r8, :128]!
vld2.32 {q14}, [r7, :128]!
vld2.32 {q9}, [r4, :128]!
vld2.32 {q10}, [r3, :128]!
vld2.32 {q11}, [r6, :128]!
vld2.32 {q12}, [r5, :128]!
vsub.f32 q1, q14, q13
vld2.32 {q0}, [r9, :128]!
subs r11, r11, #1
vsub.f32 q2, q0, q15
vadd.f32 q0, q0, q15
vmul.f32 d10, d2, d17
vmul.f32 d11, d3, d16
vmul.f32 d12, d3, d17
vmul.f32 d6, d4, d17
vmul.f32 d7, d5, d16
vmul.f32 d8, d4, d16
vmul.f32 d9, d5, d17
vmul.f32 d13, d2, d16
vsub.f32 d7, d7, d6
vadd.f32 d11, d11, d10
vsub.f32 q1, q12, q11
vsub.f32 q2, q10, q9
vadd.f32 d6, d9, d8
vadd.f32 q4, q14, q13
vadd.f32 q11, q12, q11
vadd.f32 q12, q10, q9
vsub.f32 d10, d13, d12
vsub.f32 q7, q4, q0
vsub.f32 q9, q12, q11
vsub.f32 q13, q5, q3
vadd.f32 d29, d5, d2 @
vadd.f32 q5, q5, q3
vadd.f32 q10, q4, q0
vadd.f32 q11, q12, q11
vsub.f32 d31, d5, d2 @
vsub.f32 d28, d4, d3 @
vadd.f32 d30, d4, d3 @
vadd.f32 d5, d19, d14 @
vadd.f32 d7, d31, d26 @
vadd.f32 q1, q14, q5
vadd.f32 q0, q11, q10
vsub.f32 d6, d30, d27 @
vsub.f32 d4, d18, d15 @
vsub.f32 d13, d19, d14 @
vadd.f32 d12, d18, d15 @
vsub.f32 d15, d31, d26 @
ldr r2, [r12], #4
vtrn.32 q1, q3
ldr lr, [r12], #4
vtrn.32 q0, q2
add r2, r0, r2, lsl #2
vsub.f32 q4, q11, q10
add lr, r0, lr, lsl #2
vsub.f32 q5, q14, q5
vadd.f32 d14, d30, d27 @
vst2.32 {q0,q1}, [r2, :128]!
vst2.32 {q2,q3}, [lr, :128]!
vtrn.32 q4, q6
vtrn.32 q5, q7
vst2.32 {q4,q5}, [r2, :128]!
vst2.32 {q6,q7}, [lr, :128]!
bne _neon_ee_loop
ldr r11, [r1, #12]
vld2.32 {q9}, [r5, :128]! @tag2
vld2.32 {q13}, [r3, :128]! @tag0
vld2.32 {q12}, [r4, :128]! @tag1
vld2.32 {q0}, [r7, :128]! @tag4
vsub.f32 q11, q13, q12
vld2.32 {q8}, [r6, :128]! @tag3
vadd.f32 q12, q13, q12
vsub.f32 q10, q9, q8
vadd.f32 q8, q9, q8
vadd.f32 q9, q12, q8
vadd.f32 d9, d23, d20 @
vsub.f32 d11, d23, d20 @
vsub.f32 q8, q12, q8
vsub.f32 d8, d22, d21 @
vadd.f32 d10, d22, d21 @
ldr r2, [r12], #4
vld1.32 {d20, d21}, [r11, :128]
ldr lr, [r12], #4
vtrn.32 q9, q4
add r2, r0, r2, lsl #2
vtrn.32 q8, q5
add lr, r0, lr, lsl #2
vswp d9,d10
vst1.32 {d8,d9,d10,d11}, [lr, :128]!
vld2.32 {q13}, [r10, :128]! @tag7
vld2.32 {q15}, [r9, :128]! @tag6
vld2.32 {q11}, [r8, :128]! @tag5
vsub.f32 q14, q15, q13
vsub.f32 q12, q0, q11
vadd.f32 q11, q0, q11
vadd.f32 q13, q15, q13
vadd.f32 d13, d29, d24 @
vadd.f32 q15, q13, q11
vsub.f32 d12, d28, d25 @
vsub.f32 d15, d29, d24 @
vadd.f32 d14, d28, d25 @
vtrn.32 q15, q6
vsub.f32 q15, q13, q11
vtrn.32 q15, q7
vswp d13, d14
vst1.32 {d12,d13,d14,d15}, [lr, :128]!
vtrn.32 q13, q14
vtrn.32 q11, q12
vmul.f32 d24, d26, d21
vmul.f32 d28, d27, d20
vmul.f32 d25, d26, d20
vmul.f32 d26, d27, d21
vmul.f32 d27, d22, d21
vmul.f32 d30, d23, d20
vmul.f32 d29, d23, d21
vmul.f32 d22, d22, d20
vsub.f32 d21, d28, d24
vadd.f32 d20, d26, d25
vadd.f32 d25, d30, d27
vsub.f32 d24, d22, d29
vadd.f32 q11, q12, q10
vsub.f32 q10, q12, q10
vadd.f32 q0, q9, q11
vsub.f32 q2, q9, q11
vadd.f32 d3, d17, d20 @
vsub.f32 d7, d17, d20 @
vsub.f32 d2, d16, d21 @
vadd.f32 d6, d16, d21 @
vswp d1, d2
vswp d5, d6
vstmia r2!, {q0-q3}
add r2, r7, #0
add r7, r9, #0
add r9, r2, #0
add r2, r8, #0
add r8, r10, #0
add r10, r2, #0
ldr r11, [r1, #32] @ this is p->i1
cmp r11, #0
beq _neon_oo_loop_exit
_neon_oo_loop:
vld2.32 {q8}, [r6, :128]!
vld2.32 {q9}, [r5, :128]!
vld2.32 {q10}, [r4, :128]!
vld2.32 {q13}, [r3, :128]!
vadd.f32 q11, q9, q8
vsub.f32 q8, q9, q8
vsub.f32 q9, q13, q10
vadd.f32 q12, q13, q10
subs r11, r11, #1
vld2.32 {q10}, [r7, :128]!
vld2.32 {q13}, [r9, :128]!
vsub.f32 q2, q12, q11
vsub.f32 d7, d19, d16 @
vadd.f32 d3, d19, d16 @
vadd.f32 d6, d18, d17 @
vsub.f32 d2, d18, d17 @
vld2.32 {q9}, [r8, :128]!
vld2.32 {q8}, [r10, :128]!
vadd.f32 q0, q12, q11
vadd.f32 q11, q13, q8
vadd.f32 q12, q10, q9
vsub.f32 q8, q13, q8
vsub.f32 q9, q10, q9
vsub.f32 q6, q12, q11
vadd.f32 q4, q12, q11
vtrn.32 q0, q2
ldr r2, [r12], #4
vsub.f32 d15, d19, d16 @
ldr lr, [r12], #4
vadd.f32 d11, d19, d16 @
vadd.f32 d14, d18, d17 @
vsub.f32 d10, d18, d17 @
add r2, r0, r2, lsl #2
vtrn.32 q1, q3
add lr, r0, lr, lsl #2
vst2.32 {q0,q1}, [r2, :128]!
vst2.32 {q2,q3}, [lr, :128]!
vtrn.32 q4, q6
vtrn.32 q5, q7
vst2.32 {q4,q5}, [r2, :128]!
vst2.32 {q6,q7}, [lr, :128]!
bne _neon_oo_loop
_neon_oo_loop_exit:
add r2, r3, #0
add r3, r7, #0
add r7, r2, #0
add r2, r4, #0
add r4, r8, #0
add r8, r2, #0
add r2, r5, #0
add r5, r9, #0
add r9, r2, #0
add r2, r6, #0
add r6, r10, #0
add r10, r2, #0
add r2, r9, #0
add r9, r10, #0
add r10, r2, #0
ldr r2, [r1, #16]
ldr r11, [r1, #32] @ this is p->i1
cmp r11, #0
beq _neon_ee_loop2_exit
vld1.32 {d16, d17}, [r2, :128]
_neon_ee_loop2:
vld2.32 {q15}, [r10, :128]!
vld2.32 {q13}, [r8, :128]!
vld2.32 {q14}, [r7, :128]!
vld2.32 {q9}, [r4, :128]!
vld2.32 {q10}, [r3, :128]!
vld2.32 {q11}, [r6, :128]!
vld2.32 {q12}, [r5, :128]!
vsub.f32 q1, q14, q13
vld2.32 {q0}, [r9, :128]!
subs r11, r11, #1
vsub.f32 q2, q0, q15
vadd.f32 q0, q0, q15
vmul.f32 d10, d2, d17
vmul.f32 d11, d3, d16
vmul.f32 d12, d3, d17
vmul.f32 d6, d4, d17
vmul.f32 d7, d5, d16
vmul.f32 d8, d4, d16
vmul.f32 d9, d5, d17
vmul.f32 d13, d2, d16
vsub.f32 d7, d7, d6
vadd.f32 d11, d11, d10
vsub.f32 q1, q12, q11
vsub.f32 q2, q10, q9
vadd.f32 d6, d9, d8
vadd.f32 q4, q14, q13
vadd.f32 q11, q12, q11
vadd.f32 q12, q10, q9
vsub.f32 d10, d13, d12
vsub.f32 q7, q4, q0
vsub.f32 q9, q12, q11
vsub.f32 q13, q5, q3
vadd.f32 d29, d5, d2 @
vadd.f32 q5, q5, q3
vadd.f32 q10, q4, q0
vadd.f32 q11, q12, q11
vsub.f32 d31, d5, d2 @
vsub.f32 d28, d4, d3 @
vadd.f32 d30, d4, d3 @
vadd.f32 d5, d19, d14 @
vadd.f32 d7, d31, d26 @
vadd.f32 q1, q14, q5
vadd.f32 q0, q11, q10
vsub.f32 d6, d30, d27 @
vsub.f32 d4, d18, d15 @
vsub.f32 d13, d19, d14 @
vadd.f32 d12, d18, d15 @
vsub.f32 d15, d31, d26 @
ldr r2, [r12], #4
vtrn.32 q1, q3
ldr lr, [r12], #4
vtrn.32 q0, q2
add r2, r0, r2, lsl #2
vsub.f32 q4, q11, q10
add lr, r0, lr, lsl #2
vsub.f32 q5, q14, q5
vadd.f32 d14, d30, d27 @
vst2.32 {q0,q1}, [r2, :128]!
vst2.32 {q2,q3}, [lr, :128]!
vtrn.32 q4, q6
vtrn.32 q5, q7
vst2.32 {q4,q5}, [r2, :128]!
vst2.32 {q6,q7}, [lr, :128]!
bne _neon_ee_loop2
_neon_ee_loop2_exit:
vldmia sp!, {d8-d15}
pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}
.align 4
#ifdef __APPLE__
.globl _neon_static_o_i
_neon_static_o_i:
#else
.globl neon_static_o_i
neon_static_o_i:
#endif
push {r4, r5, r6, r7, r8, r9, r10, r11, lr}
vstmdb sp!, {d8-d15}
ldr lr, [r0, #40] @ this is p->N
add r3, r1, #0
add r7, r1, lr
add r5, r7, lr
add r10, r5, lr
add r4, r10, lr
add r8, r4, lr
add r6, r8, lr
add r9, r6, lr
ldr r12, [r0]
add r1, r0, #0
add r0, r2, #0
ldr r2, [r1, #16] @ this is p->ee_ws
ldr r11, [r1, #28] @ this is p->i0
vld1.32 {d16, d17}, [r2, :128]
_neon_ee_o_loop:
vld2.32 {q15}, [r10, :128]!
vld2.32 {q13}, [r8, :128]!
vld2.32 {q14}, [r7, :128]!
vld2.32 {q9}, [r4, :128]!
vld2.32 {q10}, [r3, :128]!
vld2.32 {q11}, [r6, :128]!
vld2.32 {q12}, [r5, :128]!
vsub.f32 q1, q14, q13
vld2.32 {q0}, [r9, :128]!
subs r11, r11, #1
vsub.f32 q2, q0, q15
vadd.f32 q0, q0, q15
vmul.f32 d10, d2, d17
vmul.f32 d11, d3, d16
vmul.f32 d12, d3, d17
vmul.f32 d6, d4, d17
vmul.f32 d7, d5, d16
vmul.f32 d8, d4, d16
vmul.f32 d9, d5, d17
vmul.f32 d13, d2, d16
vsub.f32 d7, d7, d6
vadd.f32 d11, d11, d10
vsub.f32 q1, q12, q11
vsub.f32 q2, q10, q9
vadd.f32 d6, d9, d8
vadd.f32 q4, q14, q13
vadd.f32 q11, q12, q11
vadd.f32 q12, q10, q9
vsub.f32 d10, d13, d12
vsub.f32 q7, q4, q0
vsub.f32 q9, q12, q11
vsub.f32 q13, q5, q3
vadd.f32 d29, d5, d2 @
vadd.f32 q5, q5, q3
vadd.f32 q10, q4, q0
vadd.f32 q11, q12, q11
vsub.f32 d31, d5, d2 @
vsub.f32 d28, d4, d3 @
vadd.f32 d30, d4, d3 @
vadd.f32 d5, d19, d14 @
vadd.f32 d7, d31, d26 @
vadd.f32 q1, q14, q5
vadd.f32 q0, q11, q10
vsub.f32 d6, d30, d27 @
vsub.f32 d4, d18, d15 @
vsub.f32 d13, d19, d14 @
vadd.f32 d12, d18, d15 @
vsub.f32 d15, d31, d26 @
ldr r2, [r12], #4
vtrn.32 q1, q3
ldr lr, [r12], #4
vtrn.32 q0, q2
add r2, r0, r2, lsl #2
vsub.f32 q4, q11, q10
add lr, r0, lr, lsl #2
vsub.f32 q5, q14, q5
vadd.f32 d14, d30, d27 @
vst2.32 {q0,q1}, [r2, :128]!
vst2.32 {q2,q3}, [lr, :128]!
vtrn.32 q4, q6
vtrn.32 q5, q7
vst2.32 {q4,q5}, [r2, :128]!
vst2.32 {q6,q7}, [lr, :128]!
bne _neon_ee_o_loop
add r2, r7, #0
add r7, r9, #0
add r9, r2, #0
add r2, r8, #0
add r8, r10, #0
add r10, r2, #0
ldr r11, [r1, #32] @ this is p->i1
cmp r11, #0
beq _neon_oo_o_loop_exit
_neon_oo_o_loop:
vld2.32 {q8}, [r6, :128]!
vld2.32 {q9}, [r5, :128]!
vld2.32 {q10}, [r4, :128]!
vld2.32 {q13}, [r3, :128]!
vadd.f32 q11, q9, q8
vsub.f32 q8, q9, q8
vsub.f32 q9, q13, q10
vadd.f32 q12, q13, q10
subs r11, r11, #1
vld2.32 {q10}, [r7, :128]!
vld2.32 {q13}, [r9, :128]!
vsub.f32 q2, q12, q11
vsub.f32 d7, d19, d16 @
vadd.f32 d3, d19, d16 @
vadd.f32 d6, d18, d17 @
vsub.f32 d2, d18, d17 @
vld2.32 {q9}, [r8, :128]!
vld2.32 {q8}, [r10, :128]!
vadd.f32 q0, q12, q11
vadd.f32 q11, q13, q8
vadd.f32 q12, q10, q9
vsub.f32 q8, q13, q8
vsub.f32 q9, q10, q9
vsub.f32 q6, q12, q11
vadd.f32 q4, q12, q11
vtrn.32 q0, q2
ldr r2, [r12], #4
vsub.f32 d15, d19, d16 @
ldr lr, [r12], #4
vadd.f32 d11, d19, d16 @
vadd.f32 d14, d18, d17 @
vsub.f32 d10, d18, d17 @
add r2, r0, r2, lsl #2
vtrn.32 q1, q3
add lr, r0, lr, lsl #2
vst2.32 {q0,q1}, [r2, :128]!
vst2.32 {q2,q3}, [lr, :128]!
vtrn.32 q4, q6
vtrn.32 q5, q7
vst2.32 {q4,q5}, [r2, :128]!
vst2.32 {q6,q7}, [lr, :128]!
bne _neon_oo_o_loop
_neon_oo_o_loop_exit:
ldr r11, [r1, #8]
vld1.32 {q8}, [r5, :128]!
vld1.32 {q10}, [r6, :128]!
vld2.32 {q11}, [r4, :128]!
vld2.32 {q13}, [r3, :128]!
vld2.32 {q15}, [r10, :128]!
vorr d25, d17, d17
vorr d24, d20, d20
vorr d20, d16, d16
vsub.f32 q9, q13, q11
vadd.f32 q11, q13, q11
ldr r2, [r12], #4
vtrn.32 d24, d25
ldr lr, [r12], #4
vtrn.32 d20, d21
add r2, r0, r2, lsl #2
vsub.f32 q8, q10, q12
add lr, r0, lr, lsl #2
vadd.f32 q10, q10, q12
vadd.f32 q0, q11, q10
vadd.f32 d25, d19, d16 @
vsub.f32 d27, d19, d16 @
vsub.f32 q1, q11, q10
vsub.f32 d24, d18, d17 @
vadd.f32 d26, d18, d17 @
vtrn.32 q0, q12
vtrn.32 q1, q13
vld1.32 {d24, d25}, [r11, :128]
vswp d1, d2
vst1.32 {q0, q1}, [r2, :128]!
vld2.32 {q0}, [r9, :128]!
vadd.f32 q1, q0, q15
vld2.32 {q13}, [r8, :128]!
vld2.32 {q14}, [r7, :128]!
vsub.f32 q15, q0, q15
vsub.f32 q0, q14, q13
vadd.f32 q3, q14, q13
vadd.f32 q2, q3, q1
vadd.f32 d29, d1, d30 @
vsub.f32 d27, d1, d30 @
vsub.f32 q3, q3, q1
vsub.f32 d28, d0, d31 @
vadd.f32 d26, d0, d31 @
vtrn.32 q2, q14
vtrn.32 q3, q13
vswp d5, d6
vst1.32 {q2, q3}, [r2, :128]!
vtrn.32 q11, q9
vtrn.32 q10, q8
vmul.f32 d20, d18, d25
vmul.f32 d22, d19, d24
vmul.f32 d21, d19, d25
vmul.f32 d18, d18, d24
vmul.f32 d19, d16, d25
vmul.f32 d30, d17, d24
vmul.f32 d23, d16, d24
vmul.f32 d24, d17, d25
vadd.f32 d17, d22, d20
vsub.f32 d16, d18, d21
vsub.f32 d21, d30, d19
vadd.f32 d20, d24, d23
vadd.f32 q9, q8, q10
vsub.f32 q8, q8, q10
vadd.f32 q4, q14, q9
vsub.f32 q6, q14, q9
vadd.f32 d11, d27, d16 @
vsub.f32 d15, d27, d16 @
vsub.f32 d10, d26, d17 @
vadd.f32 d14, d26, d17 @
vswp d9, d10
vswp d13, d14
vstmia lr!, {q4-q7}
add r2, r3, #0
add r3, r7, #0
add r7, r2, #0
add r2, r4, #0
add r4, r8, #0
add r8, r2, #0
add r2, r5, #0
add r5, r9, #0
add r9, r2, #0
add r2, r6, #0
add r6, r10, #0
add r10, r2, #0
add r2, r9, #0
add r9, r10, #0
add r10, r2, #0
ldr r2, [r1, #16]
ldr r11, [r1, #32] @ this is p->i1
cmp r11, #0
beq _neon_ee_o_loop2_exit
vld1.32 {d16, d17}, [r2, :128]
_neon_ee_o_loop2:
vld2.32 {q15}, [r10, :128]!
vld2.32 {q13}, [r8, :128]!
vld2.32 {q14}, [r7, :128]!
vld2.32 {q9}, [r4, :128]!
vld2.32 {q10}, [r3, :128]!
vld2.32 {q11}, [r6, :128]!
vld2.32 {q12}, [r5, :128]!
vsub.f32 q1, q14, q13
vld2.32 {q0}, [r9, :128]!
subs r11, r11, #1
vsub.f32 q2, q0, q15
vadd.f32 q0, q0, q15
vmul.f32 d10, d2, d17
vmul.f32 d11, d3, d16
vmul.f32 d12, d3, d17
vmul.f32 d6, d4, d17
vmul.f32 d7, d5, d16
vmul.f32 d8, d4, d16
vmul.f32 d9, d5, d17
vmul.f32 d13, d2, d16
vsub.f32 d7, d7, d6
vadd.f32 d11, d11, d10
vsub.f32 q1, q12, q11
vsub.f32 q2, q10, q9
vadd.f32 d6, d9, d8
vadd.f32 q4, q14, q13
vadd.f32 q11, q12, q11
vadd.f32 q12, q10, q9
vsub.f32 d10, d13, d12
vsub.f32 q7, q4, q0
vsub.f32 q9, q12, q11
vsub.f32 q13, q5, q3
vadd.f32 d29, d5, d2 @
vadd.f32 q5, q5, q3
vadd.f32 q10, q4, q0
vadd.f32 q11, q12, q11
vsub.f32 d31, d5, d2 @
vsub.f32 d28, d4, d3 @
vadd.f32 d30, d4, d3 @
vadd.f32 d5, d19, d14 @
vadd.f32 d7, d31, d26 @
vadd.f32 q1, q14, q5
vadd.f32 q0, q11, q10
vsub.f32 d6, d30, d27 @
vsub.f32 d4, d18, d15 @
vsub.f32 d13, d19, d14 @
vadd.f32 d12, d18, d15 @
vsub.f32 d15, d31, d26 @
ldr r2, [r12], #4
vtrn.32 q1, q3
ldr lr, [r12], #4
vtrn.32 q0, q2
add r2, r0, r2, lsl #2
vsub.f32 q4, q11, q10
add lr, r0, lr, lsl #2
vsub.f32 q5, q14, q5
vadd.f32 d14, d30, d27 @
vst2.32 {q0,q1}, [r2, :128]!
vst2.32 {q2,q3}, [lr, :128]!
vtrn.32 q4, q6
vtrn.32 q5, q7
vst2.32 {q4,q5}, [r2, :128]!
vst2.32 {q6,q7}, [lr, :128]!
bne _neon_ee_o_loop2
_neon_ee_o_loop2_exit:
vldmia sp!, {d8-d15}
pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}
.align 4
#ifdef __APPLE__
.globl _neon_static_x4_i
_neon_static_x4_i:
#else
.globl neon_static_x4_i
neon_static_x4_i:
#endif
@ add r3, r0, #0
push {r4, r5, r6, lr}
vstmdb sp!, {d8-d15}
vld1.32 {q8,q9}, [r0, :128]
add r4, r0, r1, lsl #1
vld1.32 {q10,q11}, [r4, :128]
add r5, r0, r1, lsl #2
vld1.32 {q12,q13}, [r5, :128]
add r6, r4, r1, lsl #2
vld1.32 {q14,q15}, [r6, :128]
vld1.32 {q2,q3}, [r2, :128]
vmul.f32 q0, q13, q3
vmul.f32 q5, q12, q2
vmul.f32 q1, q14, q2
vmul.f32 q4, q14, q3
vmul.f32 q14, q12, q3
vmul.f32 q13, q13, q2
vmul.f32 q12, q15, q3
vmul.f32 q2, q15, q2
vsub.f32 q0, q5, q0
vadd.f32 q13, q13, q14
vadd.f32 q12, q12, q1
vsub.f32 q1, q2, q4
vadd.f32 q15, q0, q12
vsub.f32 q12, q0, q12
vadd.f32 q14, q13, q1
vsub.f32 q13, q13, q1
vadd.f32 q0, q8, q15
vadd.f32 q1, q9, q14
vsub.f32 q2, q10, q13 @
vsub.f32 q4, q8, q15
vadd.f32 q3, q11, q12 @
vst1.32 {q0,q1}, [r0, :128]
vsub.f32 q5, q9, q14
vadd.f32 q6, q10, q13 @
vsub.f32 q7, q11, q12 @
vst1.32 {q2,q3}, [r4, :128]
vst1.32 {q4,q5}, [r5, :128]
vst1.32 {q6,q7}, [r6, :128]
vldmia sp!, {d8-d15}
pop {r4, r5, r6, pc}
.align 4
#ifdef __APPLE__
.globl _neon_static_x8_i
_neon_static_x8_i:
#else
.globl neon_static_x8_i
neon_static_x8_i:
#endif
push {r4, r5, r6, r7, r8, r9, r10, r11, lr}
vstmdb sp!, {d8-d15}
mov r11, #0
add r3, r0, #0 @ data0
add r5, r0, r1, lsl #1 @ data2
add r4, r0, r1 @ data1
add r7, r5, r1, lsl #1 @ data4
add r6, r5, r1 @ data3
add r9, r7, r1, lsl #1 @ data6
add r8, r7, r1 @ data5
add r10, r9, r1 @ data7
add r12, r2, #0 @ LUT
sub r11, r11, r1, lsr #5
neon_x8_loop:
vld1.32 {q2,q3}, [r12, :128]!
vld1.32 {q14,q15}, [r6, :128]
vld1.32 {q10,q11}, [r5, :128]
adds r11, r11, #1
vmul.f32 q12, q15, q2
vmul.f32 q8, q14, q3
vmul.f32 q13, q14, q2
vmul.f32 q9, q10, q3
vmul.f32 q1, q10, q2
vmul.f32 q0, q11, q2
vmul.f32 q14, q11, q3
vmul.f32 q15, q15, q3
vld1.32 {q2,q3}, [r12, :128]!
vsub.f32 q10, q12, q8
vadd.f32 q11, q0, q9
vadd.f32 q8, q15, q13
vld1.32 {q12,q13}, [r4, :128]
vsub.f32 q9, q1, q14
vsub.f32 q15, q11, q10
vsub.f32 q14, q9, q8
vsub.f32 q4, q12, q15 @
vadd.f32 q6, q12, q15 @
vadd.f32 q5, q13, q14 @
vsub.f32 q7, q13, q14 @
vld1.32 {q14,q15}, [r9, :128]
vld1.32 {q12,q13}, [r7, :128]
vmul.f32 q1, q14, q2
vmul.f32 q0, q14, q3
vst1.32 {q4,q5}, [r4, :128]
vmul.f32 q14, q15, q3
vmul.f32 q4, q15, q2
vadd.f32 q15, q9, q8
vst1.32 {q6,q7}, [r6, :128]
vmul.f32 q8, q12, q3
vmul.f32 q5, q13, q3
vmul.f32 q12, q12, q2
vmul.f32 q9, q13, q2
vadd.f32 q14, q14, q1
vsub.f32 q13, q4, q0
vadd.f32 q0, q9, q8
vld1.32 {q8,q9}, [r3, :128]
vadd.f32 q1, q11, q10
vsub.f32 q12, q12, q5
vadd.f32 q11, q8, q15
vsub.f32 q8, q8, q15
vadd.f32 q2, q12, q14
vsub.f32 q10, q0, q13
vadd.f32 q15, q0, q13
vadd.f32 q13, q9, q1
vsub.f32 q9, q9, q1
vsub.f32 q12, q12, q14
vadd.f32 q0, q11, q2
vadd.f32 q1, q13, q15
vsub.f32 q4, q11, q2
vsub.f32 q2, q8, q10 @
vadd.f32 q3, q9, q12 @
vst1.32 {q0,q1}, [r3, :128]!
vsub.f32 q5, q13, q15
vld1.32 {q14,q15}, [r10, :128]
vsub.f32 q7, q9, q12 @
vld1.32 {q12,q13}, [r8, :128]
vst1.32 {q2,q3}, [r5, :128]!
vld1.32 {q2,q3}, [r12, :128]!
vadd.f32 q6, q8, q10 @
vmul.f32 q8, q14, q2
vst1.32 {q4,q5}, [r7, :128]!
vmul.f32 q10, q15, q3
vmul.f32 q9, q13, q3
vmul.f32 q11, q12, q2
vmul.f32 q14, q14, q3
vst1.32 {q6,q7}, [r9, :128]!
vmul.f32 q15, q15, q2
vmul.f32 q12, q12, q3
vmul.f32 q13, q13, q2
vadd.f32 q10, q10, q8
vsub.f32 q11, q11, q9
vld1.32 {q8,q9}, [r4, :128]
vsub.f32 q14, q15, q14
vadd.f32 q15, q13, q12
vadd.f32 q13, q11, q10
vadd.f32 q12, q15, q14
vsub.f32 q15, q15, q14
vsub.f32 q14, q11, q10
vld1.32 {q10,q11}, [r6, :128]
vadd.f32 q0, q8, q13
vadd.f32 q1, q9, q12
vsub.f32 q2, q10, q15 @
vadd.f32 q3, q11, q14 @
vsub.f32 q4, q8, q13
vst1.32 {q0,q1}, [r4, :128]!
vsub.f32 q5, q9, q12
vadd.f32 q6, q10, q15 @
vst1.32 {q2,q3}, [r6, :128]!
vsub.f32 q7, q11, q14 @
vst1.32 {q4,q5}, [r8, :128]!
vst1.32 {q6,q7}, [r10, :128]!
bne neon_x8_loop
vldmia sp!, {d8-d15}
pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}
.align 4
#ifdef __APPLE__
.globl _neon_static_x8_t_i
_neon_static_x8_t_i:
#else
.globl neon_static_x8_t_i
neon_static_x8_t_i:
#endif
push {r4, r5, r6, r7, r8, r9, r10, r11, lr}
vstmdb sp!, {d8-d15}
mov r11, #0
add r3, r0, #0 @ data0
add r5, r0, r1, lsl #1 @ data2
add r4, r0, r1 @ data1
add r7, r5, r1, lsl #1 @ data4
add r6, r5, r1 @ data3
add r9, r7, r1, lsl #1 @ data6
add r8, r7, r1 @ data5
add r10, r9, r1 @ data7
add r12, r2, #0 @ LUT
sub r11, r11, r1, lsr #5
neon_x8_t_loop:
vld1.32 {q2,q3}, [r12, :128]!
vld1.32 {q14,q15}, [r6, :128]
vld1.32 {q10,q11}, [r5, :128]
adds r11, r11, #1
vmul.f32 q12, q15, q2
vmul.f32 q8, q14, q3
vmul.f32 q13, q14, q2
vmul.f32 q9, q10, q3
vmul.f32 q1, q10, q2
vmul.f32 q0, q11, q2
vmul.f32 q14, q11, q3
vmul.f32 q15, q15, q3
vld1.32 {q2,q3}, [r12, :128]!
vsub.f32 q10, q12, q8
vadd.f32 q11, q0, q9
vadd.f32 q8, q15, q13
vld1.32 {q12,q13}, [r4, :128]
vsub.f32 q9, q1, q14
vsub.f32 q15, q11, q10
vsub.f32 q14, q9, q8
vsub.f32 q4, q12, q15 @
vadd.f32 q6, q12, q15 @
vadd.f32 q5, q13, q14 @
vsub.f32 q7, q13, q14 @
vld1.32 {q14,q15}, [r9, :128]
vld1.32 {q12,q13}, [r7, :128]
vmul.f32 q1, q14, q2
vmul.f32 q0, q14, q3
vst1.32 {q4,q5}, [r4, :128]
vmul.f32 q14, q15, q3
vmul.f32 q4, q15, q2
vadd.f32 q15, q9, q8
vst1.32 {q6,q7}, [r6, :128]
vmul.f32 q8, q12, q3
vmul.f32 q5, q13, q3
vmul.f32 q12, q12, q2
vmul.f32 q9, q13, q2
vadd.f32 q14, q14, q1
vsub.f32 q13, q4, q0
vadd.f32 q0, q9, q8
vld1.32 {q8,q9}, [r3, :128]
vadd.f32 q1, q11, q10
vsub.f32 q12, q12, q5
vadd.f32 q11, q8, q15
vsub.f32 q8, q8, q15
vadd.f32 q2, q12, q14
vsub.f32 q10, q0, q13
vadd.f32 q15, q0, q13
vadd.f32 q13, q9, q1
vsub.f32 q9, q9, q1
vsub.f32 q12, q12, q14
vadd.f32 q0, q11, q2
vadd.f32 q1, q13, q15
vsub.f32 q4, q11, q2
vsub.f32 q2, q8, q10 @
vadd.f32 q3, q9, q12 @
vst2.32 {q0,q1}, [r3, :128]!
vsub.f32 q5, q13, q15
vld1.32 {q14,q15}, [r10, :128]
vsub.f32 q7, q9, q12 @
vld1.32 {q12,q13}, [r8, :128]
vst2.32 {q2,q3}, [r5, :128]!
vld1.32 {q2,q3}, [r12, :128]!
vadd.f32 q6, q8, q10 @
vmul.f32 q8, q14, q2
vst2.32 {q4,q5}, [r7, :128]!
vmul.f32 q10, q15, q3
vmul.f32 q9, q13, q3
vmul.f32 q11, q12, q2
vmul.f32 q14, q14, q3
vst2.32 {q6,q7}, [r9, :128]!
vmul.f32 q15, q15, q2
vmul.f32 q12, q12, q3
vmul.f32 q13, q13, q2
vadd.f32 q10, q10, q8
vsub.f32 q11, q11, q9
vld1.32 {q8,q9}, [r4, :128]
vsub.f32 q14, q15, q14
vadd.f32 q15, q13, q12
vadd.f32 q13, q11, q10
vadd.f32 q12, q15, q14
vsub.f32 q15, q15, q14
vsub.f32 q14, q11, q10
vld1.32 {q10,q11}, [r6, :128]
vadd.f32 q0, q8, q13
vadd.f32 q1, q9, q12
vsub.f32 q2, q10, q15 @
vadd.f32 q3, q11, q14 @
vsub.f32 q4, q8, q13
vst2.32 {q0,q1}, [r4, :128]!
vsub.f32 q5, q9, q12
vadd.f32 q6, q10, q15 @
vst2.32 {q2,q3}, [r6, :128]!
vsub.f32 q7, q11, q14 @
vst2.32 {q4,q5}, [r8, :128]!
vst2.32 {q6,q7}, [r10, :128]!
bne neon_x8_t_loop
vldmia sp!, {d8-d15}
pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}

209
3rdparty/ffts/ffts-master/src/patterns.c vendored Executable file
View File

@@ -0,0 +1,209 @@
/*
This file is part of FFTS -- The Fastest Fourier Transform in the South
Copyright (c) 2012, Anthony M. Blake <amb@anthonix.com>
Copyright (c) 2012, The University of Waikato
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 "patterns.h"
void permute_addr(int N, int offset, int stride, int *d) {
int i, a[4] = {0,2,1,3};
for(i=0;i<4;i++) {
d[i] = offset + (a[i] << stride);
if(d[i] < 0) d[i] += N;
}
}
void ffts_hardcodedleaf_is_rec(ptrdiff_t **is, int bigN, int N, int poffset, int offset, int stride, int even, int VL) {
if(N > 4) {
ffts_hardcodedleaf_is_rec(is, bigN, N/2, poffset, offset, stride + 1, even, VL);
if(N/4 >= 4) ffts_hardcodedleaf_is_rec(is, bigN, N/4, poffset+(1<<stride),offset+(N/2), stride + 2, 0, VL);
if(N/4 >= 4) ffts_hardcodedleaf_is_rec(is, bigN, N/4, poffset-(1<<stride),offset+(3*N/4), stride + 2, 0, VL);
else {
int temp = poffset+(1<<stride);
if(temp < 0) temp += bigN;
temp *= 2;
if(!(temp % (VL*2))) {
(*is)[0] = poffset+(1<<stride);
(*is)[1] = poffset+(1<<stride)+(1<<(stride+2));
(*is)[2] = poffset-(1<<stride);
(*is)[3] = poffset-(1<<stride)+(1<<(stride+2));
int i;
for(i=0;i<4;i++) if((*is)[i] < 0) (*is)[i] += bigN;
for(i=0;i<4;i++) (*is)[i] *= 2;
*is += 4;
}
}
}else if(N == 4) {
int perm[4];
permute_addr(bigN, poffset, stride, perm);
if(!((perm[0]*2) % (VL*2))) {
int i;
for(i=0;i<4;i++) {
(*is)[i] = perm[i] * 2;
}
*is += 4;
}
}
}
void ffts_init_is(ffts_plan_t *p, int N, int leafN, int VL) {
int i, i0 = N/leafN/3+1, i1=N/leafN/3, i2 = N/leafN/3;
int stride = log(N/leafN)/log(2);
p->is = malloc(N/VL * sizeof(ptrdiff_t));
ptrdiff_t *is = p->is;
if((N/leafN) % 3 > 1) i1++;
for(i=0;i<i0;i++) ffts_hardcodedleaf_is_rec(&is, N, leafN, i, 0, stride, 1, VL);
for(i=i0;i<i0+i1;i++) {
ffts_hardcodedleaf_is_rec(&is, N, leafN/2, i, 0, stride+1, 1, VL);
ffts_hardcodedleaf_is_rec(&is, N, leafN/2, i-(1<<stride), 0, stride+1, 1, VL);
}
for(i=0-i2;i<0;i++) ffts_hardcodedleaf_is_rec(&is, N, leafN, i, 0, stride, 1, VL);
//for(i=0;i<N/VL;i++) {
// printf("%td ", p->is[i]);
// if(i % 16 == 15) printf("\n");
//}
p->i0 = i0; p->i1 = i1;
}
/**
*
*
*/
void ffts_elaborate_offsets(ptrdiff_t *offsets, int leafN, int N, int ioffset, int ooffset, int stride, int even) {
if((even && N == leafN) || (!even && N <= leafN)) {
offsets[2*(ooffset/leafN)] = ioffset*2;
offsets[2*(ooffset/leafN)+1] = ooffset;
}else if(N > 4) {
ffts_elaborate_offsets(offsets, leafN, N/2, ioffset, ooffset, stride+1, even);
ffts_elaborate_offsets(offsets, leafN, N/4, ioffset+(1<<stride), ooffset+N/2, stride+2, 0);
if(N/4 >= leafN)
ffts_elaborate_offsets(offsets, leafN, N/4, ioffset-(1<<stride), ooffset+3*N/4, stride+2, 0);
}
}
int compare_offsets(const void *a, const void *b) {
return ((ptrdiff_t *)a)[0] - ((ptrdiff_t *)b)[0];
}
uint32_t reverse_bits(uint32_t a, int n) {
uint32_t x = 0;
int i;
for(i=0;i<n;i++) {
if(a & (1 << i)) x |= 1 << (n-i-1);
}
return x;
}
void ffts_init_offsets(ffts_plan_t *p, int N, int leafN) {
ptrdiff_t *offsets = malloc(2 * N/leafN * sizeof(ptrdiff_t));
ffts_elaborate_offsets(offsets, leafN, N, 0, 0, 1, 1);
size_t i;
for(i=0;i<2*N/leafN;i+=2) {
if(offsets[i] < 0) offsets[i] = N + offsets[i];
}
qsort(offsets, N/leafN, 2 * sizeof(ptrdiff_t), compare_offsets);
//elaborate_is(p, N, 0, 0, 1);
p->offsets = malloc(N/leafN * sizeof(ptrdiff_t));
for(i=0;i<N/leafN;i++) {
p->offsets[i] = offsets[i*2+1]*2;
}
//for(i=0;i<N/leafN;i++) {
// printf("%4d %4d\n", p->offsets[i], reverse_bits(p->offsets[i], __builtin_ctzl(2*N)));
//}
free(offsets);
}
/*
int tree_count(int N, int leafN, int offset) {
if(N <= leafN) return 0;
int count = 0;
count += tree_count(N/4, leafN, offset);
count += tree_count(N/8, leafN, offset + N/4);
count += tree_count(N/8, leafN, offset + N/4 + N/8);
count += tree_count(N/4, leafN, offset + N/2);
count += tree_count(N/4, leafN, offset + 3*N/4);
return 1 + count;
}
void elaborate_tree(transform_index_t **p, int N, int leafN, int offset) {
if(N <= leafN) return;
elaborate_tree(p, N/4, leafN, offset);
elaborate_tree(p, N/8, leafN, offset + N/4);
elaborate_tree(p, N/8, leafN, offset + N/4 + N/8);
elaborate_tree(p, N/4, leafN, offset + N/2);
elaborate_tree(p, N/4, leafN, offset + 3*N/4);
(*p)[0] = N;
(*p)[1] = offset*2;
(*p)+=2;
}
void ffts_init_tree(ffts_plan_t *p, int N, int leafN) {
int count = tree_count(N, leafN, 0) + 1;
transform_index_t *ps = p->transforms = malloc(count * 2 * sizeof(transform_index_t));
//printf("count = %d\n", count);
elaborate_tree(&ps, N, leafN, 0);
#ifdef __ARM_NEON__
ps -= 2;
#endif
ps[0] = 0;
ps[1] = 0;
//int i;
//for(i=0;i<count;i++) {
// fprintf(stderr, "%lu %lu - %d\n", p->transforms[i*2], p->transforms[i*2+1],
// __builtin_ctzl(p->transforms[i*2]) - 5);
//}
}
*/
// vim: set autoindent noexpandtab tabstop=3 shiftwidth=3:

45
3rdparty/ffts/ffts-master/src/patterns.h vendored Executable file
View File

@@ -0,0 +1,45 @@
/*
This file is part of FFTS -- The Fastest Fourier Transform in the South
Copyright (c) 2012, Anthony M. Blake <amb@anthonix.com>
Copyright (c) 2012, The University of Waikato
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 __PATTERNS_H__
#define __PATTERNS_H__
#include "ffts.h"
void ffts_init_is(ffts_plan_t *p, int N, int leafN, int VL);
void ffts_init_offsets(ffts_plan_t *p, int N, int leafN);
//void ffts_init_tree(ffts_plan_t *p, int N, int leafN);
#endif
// vim: set autoindent noexpandtab tabstop=3 shiftwidth=3:

878
3rdparty/ffts/ffts-master/src/sse.s vendored Executable file
View File

@@ -0,0 +1,878 @@
/*
This file is part of FFTS -- The Fastest Fourier Transform in the South
Copyright (c) 2012, Anthony M. Blake <amb@anthonix.com>
Copyright (c) 2012, The University of Waikato
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.
*/
.globl _neon_x4
.align 4
_neon_x4:
.globl _neon_x8
.align 4
_neon_x8:
.globl _neon_x8_t
.align 4
_neon_x8_t:
#ifdef __APPLE__
.globl _leaf_ee_init
_leaf_ee_init:
#else
.globl leaf_ee_init
leaf_ee_init:
#endif
#lea L_sse_constants(%rip), %r9
movq 0xe0(%rdi), %r9
xorl %eax, %eax
# eax is loop counter (init to 0)
# rcx is loop max count
# rsi is 'in' base pointer
# rdx is 'out' base pointer
# r8 is offsets pointer
# r9 is constants pointer
# scratch: rax r11 r12
# .align 4, 0x90
# _leaf_ee + 9 needs 16 byte alignment
#ifdef __APPLE__
.globl _leaf_ee
_leaf_ee:
#else
.globl leaf_ee
leaf_ee:
#endif
movaps 32(%r9), %xmm0 #83.5
movaps (%r9), %xmm8 #83.5
LEAF_EE_1:
LEAF_EE_const_0:
movaps 0xFECA(%rsi,%rax,4), %xmm7 #83.5
LEAF_EE_const_2:
movaps 0xFECA(%rsi,%rax,4), %xmm12 #83.5
movaps %xmm7, %xmm6 #83.5
LEAF_EE_const_3:
movaps 0xFECA(%rsi,%rax,4), %xmm10 #83.5
movaps %xmm12, %xmm11 #83.5
subps %xmm10, %xmm12 #83.5
addps %xmm10, %xmm11 #83.5
xorps %xmm8, %xmm12 #83.5
LEAF_EE_const_1:
movaps 0xFECA(%rsi,%rax,4), %xmm9 #83.5
LEAF_EE_const_4:
movaps 0xFECA(%rsi,%rax,4), %xmm10 #83.5
addps %xmm9, %xmm6 #83.5
subps %xmm9, %xmm7 #83.5
LEAF_EE_const_5:
movaps 0xFECA(%rsi,%rax,4), %xmm13 #83.5
movaps %xmm10, %xmm9 #83.5
LEAF_EE_const_6:
movaps 0xFECA(%rsi,%rax,4), %xmm3 #83.5
movaps %xmm6, %xmm5 #83.5
LEAF_EE_const_7:
movaps 0xFECA(%rsi,%rax,4), %xmm14 #83.5
movaps %xmm3, %xmm15 #83.5
shufps $177, %xmm12, %xmm12 #83.5
movaps %xmm7, %xmm4 #83.5
movslq (%r8, %rax, 4), %r11 #83.44
subps %xmm13, %xmm10 #83.5
subps %xmm14, %xmm3 #83.5
addps %xmm11, %xmm5 #83.5
subps %xmm11, %xmm6 #83.5
subps %xmm12, %xmm4 #83.5
addps %xmm12, %xmm7 #83.5
addps %xmm13, %xmm9 #83.5
addps %xmm14, %xmm15 #83.5
movaps 16(%r9), %xmm12 #83.5
movaps %xmm9, %xmm1 #83.5
movaps 16(%r9), %xmm11 #83.5
movaps %xmm5, %xmm2 #83.5
mulps %xmm10, %xmm12 #83.5
subps %xmm15, %xmm9 #83.5
addps %xmm15, %xmm1 #83.5
mulps %xmm3, %xmm11 #83.5
addps %xmm1, %xmm2 #83.5
subps %xmm1, %xmm5 #83.5
shufps $177, %xmm10, %xmm10 #83.5
xorps %xmm8, %xmm9 #83.5
shufps $177, %xmm3, %xmm3 #83.5
movaps %xmm6, %xmm1 #83.5
mulps %xmm0, %xmm10 #83.5
movaps %xmm4, %xmm13 #83.5
mulps %xmm0, %xmm3 #83.5
subps %xmm10, %xmm12 #83.5
addps %xmm3, %xmm11 #83.5
movaps %xmm12, %xmm3 #83.5
movaps %xmm7, %xmm14 #83.5
shufps $177, %xmm9, %xmm9 #83.5
subps %xmm11, %xmm12 #83.5
addps %xmm11, %xmm3 #83.5
subps %xmm9, %xmm1 #83.5
addps %xmm9, %xmm6 #83.5
addps %xmm3, %xmm4 #83.5
subps %xmm3, %xmm13 #83.5
xorps %xmm8, %xmm12 #83.5
movaps %xmm2, %xmm3 #83.5
shufps $177, %xmm12, %xmm12 #83.5
movaps %xmm6, %xmm9 #83.5
movslq 8(%r8, %rax, 4), %r12 #83.59
movlhps %xmm4, %xmm3 #83.5
addq $4, %rax
shufps $238, %xmm4, %xmm2 #83.5
movaps %xmm1, %xmm4 #83.5
#movntdq %xmm3, (%rdx,%r11,4) #83.5
subps %xmm12, %xmm7 #83.5
addps %xmm12, %xmm14 #83.5
movlhps %xmm7, %xmm4 #83.5
shufps $238, %xmm7, %xmm1 #83.5
movaps %xmm5, %xmm7 #83.5
movlhps %xmm13, %xmm7 #83.5
movlhps %xmm14, %xmm9 #83.5
shufps $238, %xmm13, %xmm5 #83.5
shufps $238, %xmm14, %xmm6 #83.5
movaps %xmm3, (%rdx,%r11,4) #83.5
movaps %xmm4, 16(%rdx,%r11,4) #83.5
movaps %xmm7, 32(%rdx,%r11,4) #83.5
movaps %xmm9, 48(%rdx,%r11,4) #83.5
movaps %xmm2, (%rdx,%r12,4) #83.5
movaps %xmm1, 16(%rdx,%r12,4) #83.5
movaps %xmm5, 32(%rdx,%r12,4) #83.5
movaps %xmm6, 48(%rdx,%r12,4) #83.5
cmpq %rcx, %rax
jne LEAF_EE_1
# _leaf_oo + 4 needs to be 16 byte aligned
#ifdef __APPLE__
.globl _leaf_oo
_leaf_oo:
#else
.globl leaf_oo
leaf_oo:
#endif
movaps (%r9), %xmm5 #92.7
LEAF_OO_1:
LEAF_OO_const_0:
movaps 0xFECA(%rsi,%rax,4), %xmm4 #93.5
movaps %xmm4, %xmm6 #93.5
LEAF_OO_const_1:
movaps 0xFECA(%rsi,%rax,4), %xmm7 #93.5
LEAF_OO_const_2:
movaps 0xFECA(%rsi,%rax,4), %xmm10 #93.5
addps %xmm7, %xmm6 #93.5
subps %xmm7, %xmm4 #93.5
LEAF_OO_const_3:
movaps 0xFECA(%rsi,%rax,4), %xmm8 #93.5
movaps %xmm10, %xmm9 #93.5
LEAF_OO_const_4:
movaps 0xFECA(%rsi,%rax,4), %xmm1 #93.5
movaps %xmm6, %xmm3 #93.5
LEAF_OO_const_5:
movaps 0xFECA(%rsi,%rax,4), %xmm11 #93.5
movaps %xmm1, %xmm2 #93.5
LEAF_OO_const_6:
movaps 0xFECA(%rsi,%rax,4), %xmm14 #93.5
movaps %xmm4, %xmm15 #93.5
LEAF_OO_const_7:
movaps 0xFECA(%rsi,%rax,4), %xmm12 #93.5
movaps %xmm14, %xmm13 #93.5
movslq (%r8, %rax, 4), %r11 #83.44
subps %xmm8, %xmm10 #93.5
addps %xmm8, %xmm9 #93.5
addps %xmm11, %xmm2 #93.5
subps %xmm12, %xmm14 #93.5
subps %xmm11, %xmm1 #93.5
addps %xmm12, %xmm13 #93.5
addps %xmm9, %xmm3 #93.5
subps %xmm9, %xmm6 #93.5
xorps %xmm5, %xmm10 #93.5
xorps %xmm5, %xmm14 #93.5
shufps $177, %xmm10, %xmm10 #93.5
movaps %xmm2, %xmm9 #93.5
shufps $177, %xmm14, %xmm14 #93.5
movaps %xmm6, %xmm7 #93.5
movslq 8(%r8, %rax, 4), %r12 #83.59
addq $4, %rax #92.18
addps %xmm10, %xmm4 #93.5
addps %xmm13, %xmm9 #93.5
subps %xmm13, %xmm2 #93.5
subps %xmm10, %xmm15 #93.5
movaps %xmm1, %xmm13 #93.5
movaps %xmm2, %xmm8 #93.5
movlhps %xmm4, %xmm7 #93.5
subps %xmm14, %xmm13 #93.5
addps %xmm14, %xmm1 #93.5
shufps $238, %xmm4, %xmm6 #93.5
movaps %xmm3, %xmm14 #93.5
movaps %xmm9, %xmm4 #93.5
movlhps %xmm15, %xmm14 #93.5
movlhps %xmm13, %xmm4 #93.5
movlhps %xmm1, %xmm8 #93.5
shufps $238, %xmm15, %xmm3 #93.5
shufps $238, %xmm13, %xmm9 #93.5
shufps $238, %xmm1, %xmm2 #93.5
movaps %xmm14, (%rdx,%r11,4) #93.5
movaps %xmm7, 16(%rdx,%r11,4) #93.5
movaps %xmm4, 32(%rdx,%r11,4) #93.5
movaps %xmm8, 48(%rdx,%r11,4) #93.5
movaps %xmm3, (%rdx,%r12,4) #93.5
movaps %xmm6, 16(%rdx,%r12,4) #93.5
movaps %xmm9, 32(%rdx,%r12,4) #93.5
movaps %xmm2, 48(%rdx,%r12,4) #93.5
cmpq %rcx, %rax
jne LEAF_OO_1 # Prob 95% #92.14
#ifdef __APPLE__
.globl _leaf_eo
_leaf_eo:
#else
.globl leaf_eo
leaf_eo:
#endif
LEAF_EO_const_0:
movaps 0xFECA(%rsi,%rax,4), %xmm9 #88.5
LEAF_EO_const_2:
movaps 0xFECA(%rsi,%rax,4), %xmm7 #88.5
movaps %xmm9, %xmm11 #88.5
LEAF_EO_const_3:
movaps 0xFECA(%rsi,%rax,4), %xmm5 #88.5
movaps %xmm7, %xmm6 #88.5
LEAF_EO_const_1:
movaps 0xFECA(%rsi,%rax,4), %xmm4 #88.5
subps %xmm5, %xmm7 #88.5
addps %xmm4, %xmm11 #88.5
subps %xmm4, %xmm9 #88.5
addps %xmm5, %xmm6 #88.5
movaps (%r9), %xmm3 #88.5
movaps %xmm11, %xmm10 #88.5
xorps %xmm3, %xmm7 #88.5
movaps %xmm9, %xmm8 #88.5
shufps $177, %xmm7, %xmm7 #88.5
addps %xmm6, %xmm10 #88.5
subps %xmm6, %xmm11 #88.5
subps %xmm7, %xmm8 #88.5
addps %xmm7, %xmm9 #88.5
movslq 8(%r8, %rax, 4), %r12 #83.59
movaps %xmm10, %xmm2 #88.5
movslq (%r8, %rax, 4), %r11 #83.44
movaps %xmm11, %xmm1 #88.5
shufps $238, %xmm8, %xmm10 #88.5
shufps $238, %xmm9, %xmm11 #88.5
movaps %xmm10, (%rdx,%r12,4) #88.5
movaps %xmm11, 16(%rdx,%r12,4) #88.5
LEAF_EO_const_4:
movaps 0xFECA(%rsi,%rax,4), %xmm15 #88.5
LEAF_EO_const_5:
movaps 0xFECA(%rsi,%rax,4), %xmm12 #88.5
movaps %xmm15, %xmm14 #88.5
LEAF_EO_const_6:
movaps 0xFECA(%rsi,%rax,4), %xmm4 #88.5
addps %xmm12, %xmm14 #88.5
subps %xmm12, %xmm15 #88.5
LEAF_EO_const_7:
movaps 0xFECA(%rsi,%rax,4), %xmm13 #88.5
movaps %xmm4, %xmm5 #88.5
movaps %xmm14, %xmm7 #88.5
addps %xmm13, %xmm5 #88.5
subps %xmm13, %xmm4 #88.5
movlhps %xmm8, %xmm2 #88.5
movaps %xmm5, %xmm8 #88.5
movlhps %xmm15, %xmm7 #88.5
xorps %xmm3, %xmm15 #88.5
movaps %xmm5, %xmm6 #88.5
subps %xmm14, %xmm5 #88.5
addps %xmm14, %xmm6 #88.5
movlhps %xmm9, %xmm1 #88.5
movaps %xmm4, %xmm14 #88.5
movlhps %xmm4, %xmm8 #88.5
movaps %xmm1, %xmm12 #88.5
shufps $177, %xmm15, %xmm15 #88.5
movaps 0x30(%r9), %xmm11 #88.5
addq $4, %rax #90.5
subps %xmm15, %xmm14 #88.5
mulps %xmm7, %xmm11 #88.5
addps %xmm15, %xmm4 #88.5
movaps 0x30(%r9), %xmm9 #88.5
movaps 0x40(%r9), %xmm15 #88.5
shufps $177, %xmm7, %xmm7 #88.5
mulps %xmm8, %xmm9 #88.5
mulps %xmm15, %xmm7 #88.5
shufps $177, %xmm8, %xmm8 #88.5
subps %xmm7, %xmm11 #88.5
mulps %xmm15, %xmm8 #88.5
movaps %xmm11, %xmm10 #88.5
addps %xmm8, %xmm9 #88.5
shufps $238, %xmm14, %xmm6 #88.5
subps %xmm9, %xmm11 #88.5
addps %xmm9, %xmm10 #88.5
xorps %xmm3, %xmm11 #88.5
movaps %xmm2, %xmm3 #88.5
shufps $177, %xmm11, %xmm11 #88.5
subps %xmm10, %xmm3 #88.5
addps %xmm10, %xmm2 #88.5
addps %xmm11, %xmm12 #88.5
subps %xmm11, %xmm1 #88.5
shufps $238, %xmm4, %xmm5 #88.5
movaps %xmm5, 48(%rdx,%r12,4) #88.5
movaps %xmm6, 32(%rdx,%r12,4) #88.5
movaps %xmm2, (%rdx,%r11,4) #88.5
movaps %xmm1, 16(%rdx,%r11,4) #88.5
movaps %xmm3, 32(%rdx,%r11,4) #88.5
movaps %xmm12, 48(%rdx,%r11,4) #88.5
#ifdef __APPLE__
.globl _leaf_oe
_leaf_oe:
#else
.globl leaf_oe
leaf_oe:
#endif
movaps (%r9), %xmm0 #59.5
#movaps 0x20(%r9), %xmm1 #59.5
LEAF_OE_const_2:
movaps 0xFECA(%rsi,%rax,4), %xmm6 #70.5
LEAF_OE_const_3:
movaps 0xFECA(%rsi,%rax,4), %xmm8 #70.5
movaps %xmm6, %xmm10 #70.5
shufps $228, %xmm8, %xmm10 #70.5
movaps %xmm10, %xmm9 #70.5
shufps $228, %xmm6, %xmm8 #70.5
LEAF_OE_const_0:
movaps 0xFECA(%rsi,%rax,4), %xmm12 #70.5
LEAF_OE_const_1:
movaps 0xFECA(%rsi,%rax,4), %xmm7 #70.5
movaps %xmm12, %xmm14 #70.5
movslq (%r8, %rax, 4), %r11 #83.44
addps %xmm8, %xmm9 #70.5
subps %xmm8, %xmm10 #70.5
addps %xmm7, %xmm14 #70.5
subps %xmm7, %xmm12 #70.5
movaps %xmm9, %xmm4 #70.5
movaps %xmm14, %xmm13 #70.5
shufps $238, %xmm10, %xmm4 #70.5
xorps %xmm0, %xmm10 #70.5
shufps $177, %xmm10, %xmm10 #70.5
movaps %xmm12, %xmm11 #70.5
movaps %xmm14, %xmm5 #70.5
addps %xmm9, %xmm13 #70.5
subps %xmm10, %xmm11 #70.5
subps %xmm9, %xmm14 #70.5
shufps $238, %xmm12, %xmm5 #70.5
addps %xmm10, %xmm12 #70.5
movslq 8(%r8, %rax, 4), %r12 #83.59
movlhps %xmm11, %xmm13 #70.5
movaps %xmm13, (%rdx,%r11,4) #70.5
movaps 0x30(%r9), %xmm13 #70.5
movlhps %xmm12, %xmm14 #70.5
movaps 0x40(%r9), %xmm12 #70.5
mulps %xmm5, %xmm13 #70.5
shufps $177, %xmm5, %xmm5 #70.5
mulps %xmm12, %xmm5 #70.5
movaps %xmm14, 16(%rdx,%r11,4) #70.5
subps %xmm5, %xmm13 #70.5
movaps 0x30(%r9), %xmm5 #70.5
mulps %xmm4, %xmm5 #70.5
shufps $177, %xmm4, %xmm4 #70.5
mulps %xmm12, %xmm4 #70.5
LEAF_OE_const_4:
movaps 0xFECA(%rsi,%rax,4), %xmm9 #70.5
addps %xmm4, %xmm5 #70.5
LEAF_OE_const_6:
movaps 0xFECA(%rsi,%rax,4), %xmm7 #70.5
movaps %xmm9, %xmm3 #70.5
LEAF_OE_const_7:
movaps 0xFECA(%rsi,%rax,4), %xmm2 #70.5
movaps %xmm7, %xmm6 #70.5
LEAF_OE_const_5:
movaps 0xFECA(%rsi,%rax,4), %xmm15 #70.5
movaps %xmm13, %xmm4 #70.5
subps %xmm2, %xmm7 #70.5
addps %xmm15, %xmm3 #70.5
subps %xmm15, %xmm9 #70.5
addps %xmm2, %xmm6 #70.5
subps %xmm5, %xmm13 #70.5
addps %xmm5, %xmm4 #70.5
xorps %xmm0, %xmm7 #70.5
addq $4, %rax #72.5
movaps %xmm3, %xmm2 #70.5
shufps $177, %xmm7, %xmm7 #70.5
movaps %xmm9, %xmm8 #70.5
xorps %xmm0, %xmm13 #70.5
addps %xmm6, %xmm2 #70.5
subps %xmm7, %xmm8 #70.5
subps %xmm6, %xmm3 #70.5
addps %xmm7, %xmm9 #70.5
movaps %xmm2, %xmm10 #70.5
movaps %xmm3, %xmm11 #70.5
shufps $238, %xmm8, %xmm2 #70.5
shufps $238, %xmm9, %xmm3 #70.5
movaps %xmm2, %xmm14 #70.5
shufps $177, %xmm13, %xmm13 #70.5
subps %xmm4, %xmm14 #70.5
addps %xmm4, %xmm2 #70.5
movaps %xmm3, %xmm4 #70.5
subps %xmm13, %xmm3 #70.5
addps %xmm13, %xmm4 #70.5
movlhps %xmm8, %xmm10 #70.5
movlhps %xmm9, %xmm11 #70.5
movaps %xmm10, 32(%rdx,%r11,4) #70.5
movaps %xmm11, 48(%rdx,%r11,4) #70.5
movaps %xmm2, (%rdx,%r12,4) #70.5
movaps %xmm3, 16(%rdx,%r12,4) #70.5
movaps %xmm14, 32(%rdx,%r12,4) #70.5
movaps %xmm4, 48(%rdx,%r12,4) #70.5
#ifdef __APPLE__
.globl _leaf_end
_leaf_end:
#else
.globl leaf_end
leaf_end:
#endif
#ifdef __APPLE__
.globl _x_init
_x_init:
#else
.globl x_init
x_init:
#endif
#movaps L_sse_constants(%rip), %xmm3 #34.3
movaps (%r9), %xmm3 #34.3
movq 0x20(%rdi),%r8
#ifdef __APPLE__
.globl _x4
_x4:
#else
.globl x4
x4:
#endif
movaps 64(%rdx), %xmm0 #34.3
movaps 96(%rdx), %xmm1 #34.3
movaps (%rdx), %xmm7 #34.3
movaps (%r8), %xmm4 #const
movaps %xmm7, %xmm9 #34.3
movaps %xmm4, %xmm6 #34.3
movaps 16(%r8), %xmm2 #const
mulps %xmm0, %xmm6 #34.3
mulps %xmm1, %xmm4 #34.3
shufps $177, %xmm0, %xmm0 #34.3
shufps $177, %xmm1, %xmm1 #34.3
mulps %xmm2, %xmm0 #34.3
mulps %xmm1, %xmm2 #34.3
subps %xmm0, %xmm6 #34.3
addps %xmm2, %xmm4 #34.3
movaps %xmm6, %xmm5 #34.3
subps %xmm4, %xmm6 #34.3
addps %xmm4, %xmm5 #34.3
movaps 32(%rdx), %xmm8 #34.3
xorps %xmm3, %xmm6 #34.3
shufps $177, %xmm6, %xmm6 #34.3
movaps %xmm8, %xmm10 #34.3
movaps 112(%rdx), %xmm12 #34.3
subps %xmm5, %xmm9 #34.3
addps %xmm5, %xmm7 #34.3
addps %xmm6, %xmm10 #34.3
subps %xmm6, %xmm8 #34.3
movaps %xmm7, (%rdx) #34.3
movaps %xmm8, 32(%rdx) #34.3
movaps %xmm9, 64(%rdx) #34.3
movaps %xmm10, 96(%rdx) #34.3
movaps 32(%r8), %xmm14 #const #34.3
movaps 80(%rdx), %xmm11 #34.3
movaps %xmm14, %xmm0 #34.3
movaps 48(%r8), %xmm13 #const #34.3
mulps %xmm11, %xmm0 #34.3
mulps %xmm12, %xmm14 #34.3
shufps $177, %xmm11, %xmm11 #34.3
shufps $177, %xmm12, %xmm12 #34.3
mulps %xmm13, %xmm11 #34.3
mulps %xmm12, %xmm13 #34.3
subps %xmm11, %xmm0 #34.3
addps %xmm13, %xmm14 #34.3
movaps %xmm0, %xmm15 #34.3
subps %xmm14, %xmm0 #34.3
addps %xmm14, %xmm15 #34.3
xorps %xmm3, %xmm0 #34.3
movaps 16(%rdx), %xmm1 #34.3
movaps 48(%rdx), %xmm2 #34.3
movaps %xmm1, %xmm4 #34.3
shufps $177, %xmm0, %xmm0 #34.3
movaps %xmm2, %xmm5 #34.3
addps %xmm15, %xmm1 #34.3
subps %xmm0, %xmm2 #34.3
subps %xmm15, %xmm4 #34.3
addps %xmm0, %xmm5 #34.3
movaps %xmm1, 16(%rdx) #34.3
movaps %xmm2, 48(%rdx) #34.3
movaps %xmm4, 80(%rdx) #34.3
movaps %xmm5, 112(%rdx) #34.3
ret
# _x8_soft + 5 needs to be 16 byte aligned
#ifdef __APPLE__
.globl _x8_soft
_x8_soft:
#else
.globl x8_soft
x8_soft:
#endif
xorl %eax, %eax
movq %rdx, %rbx
movq %r8, %rsi
leaq (%rdx,%rcx,4), %r9
leaq (%r9,%rcx,4), %r10
leaq (%r10,%rcx,4), %r11
leaq (%r11,%rcx,4), %r12
leaq (%r12,%rcx,4), %r13
leaq (%r13,%rcx,4), %r14
leaq (%r14,%rcx,4), %r15
X8_soft_loop:
movaps (%rsi), %xmm9
movaps (%r10,%rax,4), %xmm6
movaps %xmm9, %xmm11
movaps (%r11,%rax,4), %xmm7
movaps 16(%rsi), %xmm8
mulps %xmm6, %xmm11
mulps %xmm7, %xmm9
shufps $177, %xmm6, %xmm6
mulps %xmm8, %xmm6
shufps $177, %xmm7, %xmm7
subps %xmm6, %xmm11
mulps %xmm7, %xmm8
movaps %xmm11, %xmm10
addps %xmm8, %xmm9
movaps 32(%rsi), %xmm15
addps %xmm9, %xmm10
subps %xmm9, %xmm11
movaps (%rbx,%rax,4), %xmm5
movaps %xmm15, %xmm6
movaps (%r12,%rax,4), %xmm12
movaps %xmm5, %xmm2
movaps (%r14,%rax,4), %xmm13
xorps %xmm3, %xmm11 #const
movaps 48(%rsi), %xmm14
subps %xmm10, %xmm2
mulps %xmm12, %xmm6
addps %xmm10, %xmm5
mulps %xmm13, %xmm15
movaps 64(%rsi), %xmm10
movaps %xmm5, %xmm0
shufps $177, %xmm12, %xmm12
shufps $177, %xmm13, %xmm13
mulps %xmm14, %xmm12
mulps %xmm13, %xmm14
subps %xmm12, %xmm6
addps %xmm14, %xmm15
movaps (%r13,%rax,4), %xmm7
movaps %xmm10, %xmm13
movaps (%r15,%rax,4), %xmm8
movaps %xmm6, %xmm12
movaps 80(%rsi), %xmm9
addq $96, %rsi
mulps %xmm7, %xmm13
subps %xmm15, %xmm6
addps %xmm15, %xmm12
mulps %xmm8, %xmm10
subps %xmm12, %xmm0
addps %xmm12, %xmm5
shufps $177, %xmm7, %xmm7
xorps %xmm3, %xmm6 #const
shufps $177, %xmm8, %xmm8
movaps %xmm2, %xmm12
mulps %xmm9, %xmm7
mulps %xmm8, %xmm9
subps %xmm7, %xmm13
addps %xmm9, %xmm10
movaps (%r9,%rax,4), %xmm4
shufps $177, %xmm11, %xmm11
movaps %xmm4, %xmm1
shufps $177, %xmm6, %xmm6
addps %xmm11, %xmm1
subps %xmm11, %xmm4
addps %xmm6, %xmm12
subps %xmm6, %xmm2
movaps %xmm13, %xmm11
movaps %xmm4, %xmm14
movaps %xmm1, %xmm6
subps %xmm10, %xmm13
addps %xmm10, %xmm11
xorps %xmm3, %xmm13 #const
addps %xmm11, %xmm4
subps %xmm11, %xmm14
shufps $177, %xmm13, %xmm13
movaps %xmm5, (%rbx,%rax,4)
movaps %xmm4, (%r9,%rax,4)
movaps %xmm2, (%r10,%rax,4)
subps %xmm13, %xmm1
addps %xmm13, %xmm6
movaps %xmm1, (%r11,%rax,4)
movaps %xmm0, (%r12,%rax,4)
movaps %xmm14, (%r13,%rax,4)
movaps %xmm12, (%r14,%rax,4)
movaps %xmm6, (%r15,%rax,4)
addq $4, %rax
cmpq %rcx, %rax
jne X8_soft_loop
ret
#ifdef __APPLE__
.globl _x8_hard
_x8_hard:
#else
.globl x8_hard
x8_hard:
#endif
movaps (%r9), %xmm5
X8_loop:
movaps (%r8), %xmm9
X8_const_2:
movaps 0xFECA(%rdx,%rax,4), %xmm6
movaps %xmm9, %xmm11
X8_const_3:
movaps 0xFECA(%rdx,%rax,4), %xmm7
movaps 16(%r8), %xmm8
mulps %xmm6, %xmm11
mulps %xmm7, %xmm9
shufps $177, %xmm6, %xmm6
mulps %xmm8, %xmm6
shufps $177, %xmm7, %xmm7
subps %xmm6, %xmm11
mulps %xmm7, %xmm8
movaps %xmm11, %xmm10
addps %xmm8, %xmm9
movaps 32(%r8), %xmm15
addps %xmm9, %xmm10
subps %xmm9, %xmm11
X8_const_0:
movaps 0xFECA(%rdx,%rax,4), %xmm3
movaps %xmm15, %xmm6
X8_const_4:
movaps 0xFECA(%rdx,%rax,4), %xmm12
movaps %xmm3, %xmm2
X8_const_6:
movaps 0xFECA(%rdx,%rax,4), %xmm13
xorps %xmm5, %xmm11
movaps 48(%r8), %xmm14
subps %xmm10, %xmm2
mulps %xmm12, %xmm6
addps %xmm10, %xmm3
mulps %xmm13, %xmm15
movaps 64(%r8), %xmm10
movaps %xmm3, %xmm0
shufps $177, %xmm12, %xmm12
shufps $177, %xmm13, %xmm13
mulps %xmm14, %xmm12
mulps %xmm13, %xmm14
subps %xmm12, %xmm6
addps %xmm14, %xmm15
X8_const_5:
movaps 0xFECA(%rdx,%rax,4), %xmm7
movaps %xmm10, %xmm13
X8_const_7:
movaps 0xFECA(%rdx,%rax,4), %xmm8
movaps %xmm6, %xmm12
movaps 80(%r8), %xmm9
addq $96, %r8
mulps %xmm7, %xmm13
subps %xmm15, %xmm6
addps %xmm15, %xmm12
mulps %xmm8, %xmm10
subps %xmm12, %xmm0
addps %xmm12, %xmm3
shufps $177, %xmm7, %xmm7
xorps %xmm5, %xmm6
shufps $177, %xmm8, %xmm8
movaps %xmm2, %xmm12
mulps %xmm9, %xmm7
mulps %xmm8, %xmm9
subps %xmm7, %xmm13
addps %xmm9, %xmm10
X8_const_1:
movaps 0xFECA(%rdx,%rax,4), %xmm4
shufps $177, %xmm11, %xmm11
movaps %xmm4, %xmm1
shufps $177, %xmm6, %xmm6
addps %xmm11, %xmm1
subps %xmm11, %xmm4
addps %xmm6, %xmm12
subps %xmm6, %xmm2
movaps %xmm13, %xmm11
movaps %xmm4, %xmm14
movaps %xmm1, %xmm6
subps %xmm10, %xmm13
addps %xmm10, %xmm11
xorps %xmm5, %xmm13
addps %xmm11, %xmm4
subps %xmm11, %xmm14
shufps $177, %xmm13, %xmm13
X8_const1_0:
movaps %xmm3, 0xFECA(%rdx,%rax,4)
X8_const1_1:
movaps %xmm4, 0xFECA(%rdx,%rax,4)
X8_const1_2:
movaps %xmm2, 0xFECA(%rdx,%rax,4)
subps %xmm13, %xmm1
addps %xmm13, %xmm6
X8_const1_3:
movaps %xmm1, 0xFECA(%rdx,%rax,4)
X8_const1_4:
movaps %xmm0, 0xFECA(%rdx,%rax,4)
X8_const1_5:
movaps %xmm14, 0xFECA(%rdx,%rax,4)
X8_const1_6:
movaps %xmm12, 0xFECA(%rdx,%rax,4)
X8_const1_7:
movaps %xmm6, 0xFECA(%rdx,%rax,4)
addq $4, %rax
cmpq %rcx, %rax
jne X8_loop
#ifdef __APPLE__
.globl _sse_leaf_ee_offsets
.globl _sse_leaf_oo_offsets
.globl _sse_leaf_eo_offsets
.globl _sse_leaf_oe_offsets
.align 4
_sse_leaf_ee_offsets:
.long LEAF_EE_const_0-_leaf_ee+0x4
.long LEAF_EE_const_1-_leaf_ee+0x5
.long LEAF_EE_const_2-_leaf_ee+0x5
.long LEAF_EE_const_3-_leaf_ee+0x5
.long LEAF_EE_const_4-_leaf_ee+0x5
.long LEAF_EE_const_5-_leaf_ee+0x5
.long LEAF_EE_const_6-_leaf_ee+0x4
.long LEAF_EE_const_7-_leaf_ee+0x5
_sse_leaf_oo_offsets:
.long LEAF_OO_const_0-_leaf_oo+0x4
.long LEAF_OO_const_1-_leaf_oo+0x4
.long LEAF_OO_const_2-_leaf_oo+0x5
.long LEAF_OO_const_3-_leaf_oo+0x5
.long LEAF_OO_const_4-_leaf_oo+0x4
.long LEAF_OO_const_5-_leaf_oo+0x5
.long LEAF_OO_const_6-_leaf_oo+0x5
.long LEAF_OO_const_7-_leaf_oo+0x5
_sse_leaf_eo_offsets:
.long LEAF_EO_const_0-_leaf_eo+0x5
.long LEAF_EO_const_1-_leaf_eo+0x4
.long LEAF_EO_const_2-_leaf_eo+0x4
.long LEAF_EO_const_3-_leaf_eo+0x4
.long LEAF_EO_const_4-_leaf_eo+0x5
.long LEAF_EO_const_5-_leaf_eo+0x5
.long LEAF_EO_const_6-_leaf_eo+0x4
.long LEAF_EO_const_7-_leaf_eo+0x5
_sse_leaf_oe_offsets:
.long LEAF_OE_const_0-_leaf_oe+0x5
.long LEAF_OE_const_1-_leaf_oe+0x4
.long LEAF_OE_const_2-_leaf_oe+0x4
.long LEAF_OE_const_3-_leaf_oe+0x5
.long LEAF_OE_const_4-_leaf_oe+0x5
.long LEAF_OE_const_5-_leaf_oe+0x5
.long LEAF_OE_const_6-_leaf_oe+0x4
.long LEAF_OE_const_7-_leaf_oe+0x4
#else
.globl sse_leaf_ee_offsets
.globl sse_leaf_oo_offsets
.globl sse_leaf_eo_offsets
.globl sse_leaf_oe_offsets
.align 4
sse_leaf_ee_offsets:
.long LEAF_EE_const_0-leaf_ee+0x4
.long LEAF_EE_const_1-leaf_ee+0x5
.long LEAF_EE_const_2-leaf_ee+0x5
.long LEAF_EE_const_3-leaf_ee+0x5
.long LEAF_EE_const_4-leaf_ee+0x5
.long LEAF_EE_const_5-leaf_ee+0x5
.long LEAF_EE_const_6-leaf_ee+0x4
.long LEAF_EE_const_7-leaf_ee+0x5
sse_leaf_oo_offsets:
.long LEAF_OO_const_0-leaf_oo+0x4
.long LEAF_OO_const_1-leaf_oo+0x4
.long LEAF_OO_const_2-leaf_oo+0x5
.long LEAF_OO_const_3-leaf_oo+0x5
.long LEAF_OO_const_4-leaf_oo+0x4
.long LEAF_OO_const_5-leaf_oo+0x5
.long LEAF_OO_const_6-leaf_oo+0x5
.long LEAF_OO_const_7-leaf_oo+0x5
sse_leaf_eo_offsets:
.long LEAF_EO_const_0-leaf_eo+0x5
.long LEAF_EO_const_1-leaf_eo+0x4
.long LEAF_EO_const_2-leaf_eo+0x4
.long LEAF_EO_const_3-leaf_eo+0x4
.long LEAF_EO_const_4-leaf_eo+0x5
.long LEAF_EO_const_5-leaf_eo+0x5
.long LEAF_EO_const_6-leaf_eo+0x4
.long LEAF_EO_const_7-leaf_eo+0x5
sse_leaf_oe_offsets:
.long LEAF_OE_const_0-leaf_oe+0x5
.long LEAF_OE_const_1-leaf_oe+0x4
.long LEAF_OE_const_2-leaf_oe+0x4
.long LEAF_OE_const_3-leaf_oe+0x5
.long LEAF_OE_const_4-leaf_oe+0x5
.long LEAF_OE_const_5-leaf_oe+0x5
.long LEAF_OE_const_6-leaf_oe+0x4
.long LEAF_OE_const_7-leaf_oe+0x4
#endif
#ifdef __APPLE__
.data
#else
.section .data
#endif
.p2align 4
#ifdef __APPLE__
.globl _sse_constants
_sse_constants:
#else
.globl sse_constants
sse_constants:
#endif
.long 0x00000000,0x80000000,0x00000000,0x80000000
.long 0x3f3504f3,0x3f3504f3,0x3f3504f3,0x3f3504f3
.long 0xbf3504f3,0x3f3504f3,0xbf3504f3,0x3f3504f3
.long 0x3f800000,0x3f800000,0x3f3504f3,0x3f3504f3
.long 0x00000000,0x00000000,0xbf3504f3,0x3f3504f3
#ifdef __APPLE__
.globl _sse_constants_inv
_sse_constants_inv:
#else
.globl sse_constants_inv
sse_constants_inv:
#endif
.long 0x80000000,0x00000000,0x80000000,0x00000000
.long 0x3f3504f3,0x3f3504f3,0x3f3504f3,0x3f3504f3
.long 0x3f3504f3,0xbf3504f3,0x3f3504f3,0xbf3504f3
.long 0x3f800000,0x3f800000,0x3f3504f3,0x3f3504f3
.long 0x00000000,0x00000000,0x3f3504f3,0xbf3504f3

56
3rdparty/ffts/ffts-master/src/types.h vendored Executable file
View File

@@ -0,0 +1,56 @@
/*
This file is part of FFTS -- The Fastest Fourier Transform in the South
Copyright (c) 2012, Anthony M. Blake <amb@anthonix.com>
Copyright (c) 2012, The University of Waikato
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 __TYPES_H__
#define __TYPES_H__
#if defined(_WIN32) || defined(_WIN64)
#define __INLINE static __forceinline
#define __ALIGN64 __declspec(align(64))
#else
#define __ALIGN64 __attribute__((aligned(64)))
#define __INLINE static inline __attribute__((always_inline))
#endif
#if defined(complex) && !defined(_WIN32) && !defined(_WIN64)
typedef complex float cdata_t;
#else
typedef float cdata_t[2];
#endif
typedef float data_t;
#endif
// vim: set autoindent noexpandtab tabstop=3 shiftwidth=3:

46
3rdparty/ffts/ffts-master/src/vfp.h vendored Executable file
View File

@@ -0,0 +1,46 @@
/*
This file is part of FFTS -- The Fastest Fourier Transform in the South
Copyright (c) 2012, 2013 Anthony M. Blake <amb@anthonix.com>
Copyright (c) 2012, 2013 The University of Waikato
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 __VFP_H__
#define __VFP_H__
#include "ffts.h"
void vfp_e();
void vfp_o();
void vfp_x4();
void vfp_x8();
void vfp_end();
#endif
// vim: set autoindent noexpandtab tabstop=3 shiftwidth=3:

473
3rdparty/ffts/ffts-master/src/vfp.s vendored Executable file
View File

@@ -0,0 +1,473 @@
/*
This file is part of FFTS -- The Fastest Fourier Transform in the South
Copyright (c) 2012, 2013 Anthony M. Blake <amb@anthonix.com>
Copyright (c) 2012, 2013 The University of Waikato
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.
*/
@ assumes r0 = out
@ r1 = in ?
@
@ r12 = offsets
@ r3-r10 = data pointers
@ r11 = loop iterations
@ r2 = const pointer
@ & lr = temps
.align 4
#ifdef __APPLE__
.globl _vfp_e
_vfp_e:
#else
.globl vfp_e
vfp_e:
#endif
_vfp_e_loop:
vldr s15, [r2, #8]
vldr s2, [r3] @ x0
vldr s0, [r3, #4]
vldr s4, [r4] @ x1
vldr s11, [r2]
vldr s10, [r7] @ x4
vldr s3, [r7, #4]
vldr s8, [r8] @ x5
vldr s1, [r8, #4]
vldr s14, [r9] @ x6
vldr s9, [r9, #4]
vldr s6, [r10] @ x7
vldr s12, [r10, #4]
vsub.f32 s18, s3, s1
vsub.f32 s7, s10, s8
vsub.f32 s5, s14, s6
vadd.f32 s6, s14, s6
vldr s24, [r5, #4]
vsub.f32 s14, s9, s12
vldr s22, [r6, #4]
vadd.f32 s8, s10, s8
vldr s28, [r6] @ x3
vldr s17, [r5] @ x2
vadd.f32 s10, s9, s12
vmul.f32 s13, s18, s15
vmul.f32 s9, s7, s11
vmul.f32 s16, s5, s11
vmul.f32 s18, s18, s11
vmul.f32 s30, s14, s11
vldr s11, [r4, #4]
add r3, r3, #8
add r4, r4, #8
add r5, r5, #8
add r6, r6, #8
add r7, r7, #8
add r8, r8, #8
add r9, r9, #8
add r10, r10, #8
vmul.f32 s12, s5, s15
vmul.f32 s20, s14, s15
vadd.f32 s5, s2, s4
vadd.f32 s3, s3, s1
vmul.f32 s15, s7, s15
vadd.f32 s1, s24, s22
vsub.f32 s7, s24, s22
vadd.f32 s24, s17, s28
vadd.f32 s26, s0, s11
vsub.f32 s14, s9, s13
vsub.f32 s2, s2, s4
vadd.f32 s4, s16, s20
vsub.f32 s22, s0, s11
vsub.f32 s16, s17, s28
vadd.f32 s9, s5, s24
vadd.f32 s28, s18, s15
vadd.f32 s13, s8, s6
vsub.f32 s5, s5, s24
vsub.f32 s24, s8, s6
vadd.f32 s11, s26, s1
vsub.f32 s12, s30, s12
vadd.f32 s20, s3, s10
vsub.f32 s15, s3, s10
vsub.f32 s3, s26, s1
vadd.f32 s18, s9, s13
vadd.f32 s10, s14, s4
vadd.f32 s6, s2, s7 @
vsub.f32 s0, s2, s7 @
vadd.f32 s26, s11, s20
vsub.f32 s4, s14, s4
vsub.f32 s8, s22, s16 @
vadd.f32 s1, s28, s12
ldr lr, [r12], #4
add lr, r0, lr, lsl #2
subs r11, r11, #1
vstr s18, [lr]
vsub.f32 s2, s28, s12
vadd.f32 s12, s22, s16 @
vsub.f32 s16, s3, s24 @
vsub.f32 s13, s9, s13
vstr s26, [lr, #4]
vadd.f32 s28, s5, s15 @
vsub.f32 s7, s5, s15 @
vadd.f32 s14, s6, s10
vadd.f32 s5, s8, s1
vadd.f32 s9, s0, s2 @
vsub.f32 s2, s0, s2 @
vsub.f32 s11, s11, s20
vstr s28, [lr, #16]
vadd.f32 s3, s3, s24 @
vstr s16, [lr, #20]
vsub.f32 s6, s6, s10
vstr s13, [lr, #32]
vsub.f32 s13, s12, s4 @
vsub.f32 s8, s8, s1
vadd.f32 s0, s12, s4 @
vstr s11, [lr, #36]
vstr s7, [lr, #48]
vstr s3, [lr, #52]
vstr s14, [lr, #8]
vstr s5, [lr, #12]
vstr s9, [lr, #24]
vstr s13, [lr, #28]
vstr s6, [lr, #40]
vstr s8, [lr, #44]
vstr s2, [lr, #56]
vstr s0, [lr, #60]
bne _vfp_e_loop
@ assumes r0 = out
@ r1 = in ?
@
@ r12 = offsets
@ r3-r10 = data pointers
@ r11 = loop iterations
@ r2 & lr = temps
.align 4
#ifdef __APPLE__
.globl _vfp_o
_vfp_o:
#else
.globl vfp_o
vfp_o:
#endif
_vfp_o_loop:
vldr s4, [r3] @ x0
vldr s0, [r3, #4]
vldr s6, [r4] @ x1
vldr s5, [r4, #4]
vldr s7, [r5] @ x2
vldr s1, [r5, #4]
vldr s3, [r6] @ x3
vldr s8, [r6, #4]
subs r11, r11, #1
ldr r2, [r12], #4
add r2, r0, r2, lsl #2
vadd.f32 s2, s4, s6
vadd.f32 s14, s0, s5
vadd.f32 s10, s1, s8
vsub.f32 s4, s4, s6
vsub.f32 s0, s0, s5
vadd.f32 s12, s7, s3
vsub.f32 s6, s7, s3
vsub.f32 s8, s1, s8
vadd.f32 s5, s14, s10
vsub.f32 s10, s14, s10
vadd.f32 s7, s2, s12
vsub.f32 s1, s0, s6 @
vsub.f32 s12, s2, s12
vadd.f32 s3, s4, s8 @
vsub.f32 s2, s4, s8 @
vadd.f32 s0, s0, s6 @
vstr s7, [r2]
vldr s7, [r9] @ x2
vstr s5, [r2, #4]
vstr s3, [r2, #8]
vstr s1, [r2, #12]
vstr s12, [r2, #16]
vstr s10, [r2, #20]
vstr s2, [r2, #24]
vstr s0, [r2, #28]
vldr s4, [r7] @ x0
vldr s0, [r7, #4]
vldr s6, [r8] @ x1
vldr s5, [r8, #4]
vldr s3, [r10] @ x3
vldr s8, [r10, #4]
vldr s1, [r9, #4]
add r3, r3, #8
add r4, r4, #8
add r5, r5, #8
add r6, r6, #8
add r7, r7, #8
add r8, r8, #8
add r9, r9, #8
add r10, r10, #8
vadd.f32 s2, s4, s6
vadd.f32 s14, s0, s5
vadd.f32 s10, s1, s8
vsub.f32 s4, s4, s6
vsub.f32 s0, s0, s5
vadd.f32 s12, s7, s3
vsub.f32 s6, s7, s3
vsub.f32 s8, s1, s8
vadd.f32 s5, s14, s10
vsub.f32 s10, s14, s10
vadd.f32 s7, s2, s12
vsub.f32 s1, s0, s6 @
vsub.f32 s12, s2, s12
vadd.f32 s3, s4, s8 @
vsub.f32 s2, s4, s8 @
vadd.f32 s0, s0, s6 @
vstr s7, [r2, #32]
vstr s5, [r2, #36]
vstr s3, [r2, #40]
vstr s1, [r2, #44]
vstr s12, [r2, #48]
vstr s10, [r2, #52]
vstr s2, [r2, #56]
vstr s0, [r2, #60]
bne _vfp_o_loop
.align 4
#ifdef __APPLE__
.globl _vfp_x4
_vfp_x4:
#else
.globl vfp_x4
vfp_x4:
#endif
add r3, r0, #0
add r7, r2, #0
add r4, r0, r1, lsl #1
add r5, r0, r1, lsl #2
add r6, r4, r1, lsl #2
mov r11, #4
_vfp_x4_loop:
vldr s8, [r3, #0]
vldr s9, [r3, #4]
vldr s10, [r4, #0]
vldr s11, [r4, #4]
vldr s12, [r5, #0]
vldr s13, [r5, #4]
vldr s14, [r6, #0]
vldr s15, [r6, #4]
vldr s2, [r7, #0]
vldr s3, [r7, #4]
add r7, r7, #8
subs r11, r11, #1
vmul.f32 s0, s13, s3
vmul.f32 s5, s12, s2
vmul.f32 s1, s14, s2
vmul.f32 s4, s14, s3
vmul.f32 s14, s12, s3
vmul.f32 s13, s13, s2
vmul.f32 s12, s15, s3
vmul.f32 s2, s15, s2
vsub.f32 s0, s5, s0
vadd.f32 s13, s13, s14
vadd.f32 s12, s12, s1
vsub.f32 s1, s2, s4
vadd.f32 s15, s0, s12
vsub.f32 s12, s0, s12
vadd.f32 s14, s13, s1
vsub.f32 s13, s13, s1
vadd.f32 s0, s8, s15
vadd.f32 s1, s9, s14
vadd.f32 s2, s10, s13 @
vsub.f32 s4, s8, s15
vsub.f32 s3, s11, s12 @
vstr s0, [r3, #0]
vstr s1, [r3, #4]
add r3, r3, #8
vsub.f32 s5, s9, s14
vsub.f32 s6, s10, s13 @
vadd.f32 s7, s11, s12 @
vstr s2, [r4, #0]
vstr s3, [r4, #4]
add r4, r4, #8
vstr s4, [r5, #0]
vstr s5, [r5, #4]
add r5, r5, #8
vstr s6, [r6, #0]
vstr s7, [r6, #4]
add r6, r6, #8
bne _vfp_x4_loop
bx lr
.align 4
#ifdef __APPLE__
.globl _vfp_x8
_vfp_x8:
#else
.globl vfp_x8
vfp_x8:
#endif
mov r11, #0
add r3, r0, #0 @ data0
add r5, r0, r1, lsl #1 @ data2
add r4, r0, r1 @ data1
add r7, r5, r1, lsl #1 @ data4
add r6, r5, r1 @ data3
add r9, r7, r1, lsl #1 @ data6
add r8, r7, r1 @ data5
add r10, r9, r1 @ data7
add r12, r2, #0 @ LUT
sub r11, r11, r1, lsr #3
_vfp_x8_loop:
vldr s10, [r3, #0] @ x0-re
vldr s8, [r3, #4] @ x0-im
vldr s2, [r4, #0] @ x1-re
vldr s0, [r4, #4] @ x1-im
vldr s6, [r5, #0] @ x2-re
vldr s4, [r5, #4] @ x2-im
vldr s13, [r6, #0] @ x3-re
vldr s15, [r6, #4] @ x3-im
vldr s7, [r12]
vldr s11, [r12, #4]
vldr s5, [r7, #0] @ x4-re
vldr s1, [r7, #4] @ x4-im
vldr s28, [r9, #0] @ x6-re
vldr s18, [r9, #4] @ x6-im
adds r11, r11, #1
vmul.f32 s14, s15, s7
vldr s24, [r12, #12]
vmul.f32 s12, s13, s11
vmul.f32 s26, s13, s7
vldr s13, [r12, #8]
vmul.f32 s3, s4, s11
vmul.f32 s15, s15, s11
vmul.f32 s16, s4, s7
vmul.f32 s9, s6, s7
vmul.f32 s11, s6, s11
vmul.f32 s7, s18, s24
vmul.f32 s20, s1, s24
vmul.f32 s30, s5, s13
vadd.f32 s4, s26, s15
vsub.f32 s12, s14, s12
vsub.f32 s6, s9, s3
vadd.f32 s14, s16, s11
vmul.f32 s22, s28, s13
vmul.f32 s26, s28, s24
vmul.f32 s18, s18, s13
vmul.f32 s5, s5, s24
vmul.f32 s1, s1, s13
vsub.f32 s9, s30, s20
vadd.f32 s16, s14, s12
vadd.f32 s3, s22, s7
vadd.f32 s15, s6, s4
vsub.f32 s11, s18, s26
vadd.f32 s18, s1, s5
vadd.f32 s13, s8, s16
vadd.f32 s1, s9, s3
vadd.f32 s7, s10, s15
vsub.f32 s15, s10, s15
vsub.f32 s10, s9, s3
vadd.f32 s5, s18, s11
vsub.f32 s11, s18, s11
vsub.f32 s8, s8, s16
vadd.f32 s20, s7, s1
vsub.f32 s7, s7, s1
vadd.f32 s18, s13, s5
vadd.f32 s16, s15, s11 @
vsub.f32 s9, s8, s10 @
vsub.f32 s3, s13, s5
vsub.f32 s1, s15, s11 @
vstr s20, [r3]
vadd.f32 s8, s8, s10 @
vstr s18, [r3, #4]
add r3, r3, #8
vstr s16, [r5]
vstr s9, [r5, #4]
add r5, r5, #8
vstr s7, [r7]
vstr s3, [r7, #4]
add r7, r7, #8
vstr s1, [r9]
vstr s8, [r9, #4]
add r9, r9, #8
vldr s10, [r8, #0] @ x5-re
vldr s8, [r8, #4] @ x5-im
vldr s5, [r10, #0] @ x7-re
vldr s11, [r10, #4] @ x7-im
vldr s1, [r12, #16]
vldr s15, [r12, #20]
add r12, r12, #24
vmul.f32 s9, s5, s1
vmul.f32 s3, s11, s15
vmul.f32 s13, s10, s1
vmul.f32 s7, s8, s15
vmul.f32 s5, s5, s15
vmul.f32 s11, s11, s1
vmul.f32 s10, s10, s15
vmul.f32 s15, s8, s1
vsub.f32 s1, s14, s12
vadd.f32 s8, s9, s3
vsub.f32 s3, s6, s4
vsub.f32 s12, s13, s7
vsub.f32 s5, s11, s5
vadd.f32 s7, s15, s10
vadd.f32 s4, s2, s1 @
vsub.f32 s2, s2, s1 @
vsub.f32 s6, s0, s3 @
vadd.f32 s10, s12, s8
vsub.f32 s9, s12, s8
vadd.f32 s0, s0, s3 @
vsub.f32 s1, s7, s5
vadd.f32 s14, s7, s5
vadd.f32 s7, s4, s10
vsub.f32 s8, s4, s10
vsub.f32 s12, s0, s9 @
vadd.f32 s3, s2, s1 @
vadd.f32 s5, s6, s14
vsub.f32 s4, s6, s14
vsub.f32 s2, s2, s1 @
vadd.f32 s0, s0, s9 @
vstr s7, [r4]
vstr s5, [r4, #4]
add r4, r4, #8
vstr s3, [r6]
vstr s12, [r6, #4]
add r6, r6, #8
vstr s8, [r8]
vstr s4, [r8, #4]
add r8, r8, #8
vstr s2, [r10]
vstr s0, [r10, #4]
add r10, r10, #8
bne _vfp_x8_loop
bx lr
.align 4
#ifdef __APPLE__
.globl _vfp_end
_vfp_end:
#else
.globl vfp_end
vfp_end:
#endif
bx lr

4
3rdparty/ffts/ffts-master/tests/Makefile.am vendored Executable file
View File

@@ -0,0 +1,4 @@
noinst_PROGRAMS = test
test_SOURCES = test.c
test_LDADD = $(top_builddir)/src/libffts.la

591
3rdparty/ffts/ffts-master/tests/Makefile.in vendored Executable file
View File

@@ -0,0 +1,591 @@
# 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@
noinst_PROGRAMS = test$(EXEEXT)
subdir = tests
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 =
PROGRAMS = $(noinst_PROGRAMS)
am_test_OBJECTS = test.$(OBJEXT)
test_OBJECTS = $(am_test_OBJECTS)
test_DEPENDENCIES = $(top_builddir)/src/libffts.la
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 =
SOURCES = $(test_SOURCES)
DIST_SOURCES = $(test_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
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@
test_SOURCES = test.c
test_LDADD = $(top_builddir)/src/libffts.la
all: 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 tests/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu tests/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):
clean-noinstPROGRAMS:
@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
echo " rm -f" $$list; \
rm -f $$list || exit $$?; \
test -n "$(EXEEXT)" || exit 0; \
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES)
@rm -f test$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@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 $@ $<
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
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 $(PROGRAMS)
installdirs:
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-libtool clean-noinstPROGRAMS \
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-dvi: install-dvi-am
install-dvi-am:
install-exec-am:
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:
.MAKE: install-am install-strip
.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
clean-libtool clean-noinstPROGRAMS 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-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
# 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:

177
3rdparty/ffts/ffts-master/tests/test.c vendored Executable file
View File

@@ -0,0 +1,177 @@
/*
This file is part of SFFT.
Copyright (c) 2012, Anthony M. Blake
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 <stdio.h>
#include <math.h>
#ifdef __ARM_NEON__
#endif
#ifdef HAVE_SSE
#include <xmmintrin.h>
#endif
#include "../include/ffts.h"
#define PI 3.1415926535897932384626433832795028841971693993751058209
float impulse_error(int N, int sign, float *data) {
#ifdef __ANDROID__
double delta_sum = 0.0f;
double sum = 0.0f;
#else
long double delta_sum = 0.0f;
long double sum = 0.0f;
#endif
int i;
for(i=0;i<N;i++) {
#ifdef __ANDROID__
double re, im;
if(sign < 0) {
re = cos(2 * PI * (double)i / (double)N);
im = -sin(2 * PI * (double)i / (double)N);
}else{
re = cos(2 * PI * (double)i / (double)N);
im = sin(2 * PI * (double)i / (double)N);
}
#else
long double re, im;
if(sign < 0) {
re = cosl(2 * PI * (long double)i / (long double)N);
im = -sinl(2 * PI * (long double)i / (long double)N);
}else{
re = cosl(2 * PI * (long double)i / (long double)N);
im = sinl(2 * PI * (long double)i / (long double)N);
}
#endif
sum += re * re + im * im;
re = re - data[2*i];
im = im - data[2*i+1];
delta_sum += re * re + im * im;
}
#ifdef __ANDROID__
return sqrt(delta_sum) / sqrt(sum);
#else
return sqrtl(delta_sum) / sqrtl(sum);
#endif
}
int
test_transform(int n, int sign) {
#ifdef HAVE_SSE
float __attribute__ ((aligned(32))) *input = _mm_malloc(2 * n * sizeof(float), 32);
float __attribute__ ((aligned(32))) *output = _mm_malloc(2 * n * sizeof(float), 32);
#else
float __attribute__ ((aligned(32))) *input = valloc(2 * n * sizeof(float));
float __attribute__ ((aligned(32))) *output = valloc(2 * n * sizeof(float));
#endif
int i;
for(i=0;i<n;i++) {
input[2*i] = 0.0f;
input[2*i+1] = 0.0f;
}
input[2] = 1.0f;
ffts_plan_t *p = ffts_init_1d(i, sign);
if(p) {
ffts_execute(p, input, output);
printf(" %3d | %9d | %10E\n", sign, n, impulse_error(n, sign, output));
ffts_free(p);
}else{
printf("Plan unsupported\n");
return 0;
}
return 1;
}
int
main(int argc, char *argv[]) {
if(argc == 3) {
// test specific transform with test pattern and display output
int n = atoi(argv[1]);
int sign = atoi(argv[2]);
#ifdef HAVE_SSE
float __attribute__ ((aligned(32))) *input = _mm_malloc(2 * n * sizeof(float), 32);
float __attribute__ ((aligned(32))) *output = _mm_malloc(2 * n * sizeof(float), 32);
#else
float __attribute__ ((aligned(32))) *input = valloc(2 * n * sizeof(float));
float __attribute__ ((aligned(32))) *output = valloc(2 * n * sizeof(float));
#endif
int i;
for(i=0;i<n;i++) {
input[2*i] = i;
input[2*i+1] = 0.0f;
}
// input[2] = 1.0f;
ffts_plan_t *p = ffts_init_1d(i, sign);
if(p) {
ffts_execute(p, input, output);
for(i=0;i<n;i++) printf("%d %d %f %f\n", i, sign, output[2*i], output[2*i+1]);
ffts_free(p);
}else{
printf("Plan unsupported\n");
return 0;
}
#ifdef HAVE_NEON
_mm_free(input);
_mm_free(output);
#else
free(input);
free(output);
#endif
}else{
// test various sizes and display error
printf(" Sign | Size | L2 Error\n");
printf("------+-----------+-------------\n");
int n;
for(n=1;n<=18;n++) {
test_transform(pow(2,n), -1);
}
for(n=1;n<=18;n++) {
test_transform(pow(2,n), 1);
}
}
return 0;
}
// vim: set autoindent noexpandtab tabstop=3 shiftwidth=3:

3
3rdparty/ffts/githubsource.txt vendored Executable file
View File

@@ -0,0 +1,3 @@
ffts branched on github by bitbank2, including aarch64 support.
https://github.com/bitbank2/ffts.git

View File

0
KREngine/3rdparty/forsyth/forsyth.h → 3rdparty/forsyth/forsyth.h vendored Normal file → Executable file
View File

1
3rdparty/glslang vendored Submodule

Submodule 3rdparty/glslang added at 8a85691a07

Some files were not shown because too many files have changed in this diff Show More