Commit message (Collapse) | Author | Files | Lines | ||
---|---|---|---|---|---|
2023-11-18 | shader_recompiler: Fix spelling of "derivate" (#12067) | Ameer J | 1 | -3/+3 | |
2023-11-01 | shader_recompiler: Align SSBO offsets in GlobalMemory functions | Ameer J | 1 | -3/+6 | |
2023-10-03 | ci: fix new codespell errors | Liam | 1 | -1/+1 | |
2023-08-19 | Shader Recomnpiler: implement textuzreGrad 3D emulation constant propagation | Fernando Sahmkow | 1 | -4/+19 | |
2023-06-26 | emit_glasm: Fix lmem size computation | ameerj | 1 | -1/+1 | |
2023-01-29 | emit_glasm_image: Fix TXQ with MSAA textures | ameerj | 1 | -1/+9 | |
2023-01-28 | shader_recompiler: TXQ: Skip QueryLevels when possible | ameerj | 2 | -2/+2 | |
2023-01-27 | glasm: Add MS sampler types | ameerj | 2 | -5/+8 | |
2023-01-26 | shader_recompiler: Remove S32 IR type | ameerj | 2 | -5/+0 | |
The frontend IR opcodes do not distinguish between signed and unsigned integer types. Fixes broken shaders when IR validation/graphics debugging is enabled for shaders that used BitCastS32F32 | |||||
2023-01-04 | Video_core: Address feedback | Fernando Sahmkow | 1 | -0/+18 | |
2022-11-17 | shader: Implement miss attribute layer | FengChen | 2 | -0/+4 | |
2022-11-07 | video_core: Fix few issues in Tess stage | FengChen | 3 | -0/+17 | |
2022-11-04 | video_core: Fix SNORM texture buffer emulating error (#9001) | Feng Chen | 2 | -0/+5 | |
2022-10-22 | CMakeLists: Disable C4100 and C4324 | Morph | 1 | -4/+0 | |
Disabling C4100 is similar to -Wno-unused-parameter | |||||
2022-10-02 | shader_recompiler: add extended LDC to GLASM backend | Liam | 1 | -4/+21 | |
2022-09-23 | chore: fix some typos | Andrea Pappacoda | 1 | -1/+1 | |
Fix some typos reported by Lintian | |||||
2022-09-20 | video_core: Generate mipmap texture by drawing | FengChen | 3 | -0/+8 | |
2022-08-25 | video_code: support rectangle texture | FengChen | 1 | -0/+2 | |
2022-04-23 | general: Convert source file copyright comments over to SPDX | Morph | 24 | -72/+48 | |
This formats all copyright comments according to SPDX formatting guidelines. Additionally, this resolves the remaining GPLv2 only licensed files by relicensing them to GPLv2.0-or-later. | |||||
2022-03-20 | shader_recompiler: Reduce unused includes | ameerj | 6 | -14/+0 | |
2022-01-30 | shaders: Add U64->U32x2 Atomic fallback functions | ameerj | 2 | -0/+138 | |
2022-01-10 | logging/log.h: move enum class formatter to a separate file ... | liushuyu | 1 | -4/+4 | |
... to common/logging/formatter.h | |||||
2022-01-08 | logging: adapt to changes in fmt 8.1 | liushuyu | 1 | -4/+4 | |
2021-12-30 | shader: Add integer attribute get optimization pass | ameerj | 2 | -0/+17 | |
Works around an nvidia driver bug, where casting the integer attributes to float and back to an integer always returned 0. | |||||
2021-12-25 | emit_glasm_context_get_set: Fix GetAttribute return value type. | ameerj | 1 | -4/+4 | |
GetAttribute expects an F32 result type at the IR level, this fixes the return value of attributes which were not returning an F32 | |||||
2021-12-06 | glasm: Move implemented instructions from not_implemented.cpp | ameerj | 7 | -169/+220 | |
2021-12-06 | shader_recompiler: Adjust emit_context includes | ameerj | 15 | -15/+15 | |
2021-12-05 | shader_recompiler: Rename backend emit_context files | ameerj | 2 | -0/+0 | |
2021-11-16 | shader: Properly scale image reads and add GL SPIR-V support | ReinUsesLisp | 5 | -2/+16 | |
Thanks for everything! | |||||
2021-11-16 | glsl/glasm: Pass and use scaling parameters in shaders | ReinUsesLisp | 3 | -3/+7 | |
2021-11-16 | gl_graphics_pipeline: Add downscale factor to shader uniforms | ameerj | 1 | -2/+1 | |
2021-11-16 | shader: Add IsTextureScaled opcode | ReinUsesLisp | 2 | -0/+9 | |
2021-11-16 | shader: Add integer division opcodes | ReinUsesLisp | 2 | -0/+10 | |
2021-11-16 | shader: Add resolution down factor opcode | ReinUsesLisp | 2 | -0/+6 | |
2021-11-02 | Shader Cahe: Fix Phi Nodes on GLASM. | Fernando Sahmkow | 1 | -1/+1 | |
2021-07-26 | emit_glasm: Fix LINESS_ADJACENCY typo in InputPrimitive() | Lioncash | 1 | -1/+1 | |
This should be LINES_ADJACENCY | |||||
2021-07-23 | shader: Avoid usage of C++20 ranges to build in clang | ReinUsesLisp | 1 | -2/+5 | |
2021-07-23 | shader_recompiler, video_core: Resolve clang errors | lat9nq | 2 | -3/+2 | |
Silences the following warnings-turned-errors: -Wsign-conversion -Wunused-private-field -Wbraced-scalar-init -Wunused-variable And some other errors | |||||
2021-07-23 | shader: GCC fmt 8.0.0 fixes | lat9nq | 1 | -3/+5 | |
2021-07-23 | opengl: Implement LOP.CC | ameerj | 1 | -3/+27 | |
Used by MH:Rise | |||||
2021-07-23 | glasm: Add passthrough geometry shader support | ReinUsesLisp | 2 | -7/+26 | |
2021-07-23 | shader: Rework varyings and implement passthrough geometry shaders | ReinUsesLisp | 3 | -13/+14 | |
Put all varyings into a single std::bitset with helpers to access it. Implement passthrough geometry shaders using host's. | |||||
2021-07-23 | shader: Remove IAbs64 | ReinUsesLisp | 2 | -5/+0 | |
2021-07-23 | shader: Move loop safety tests to code emission | ReinUsesLisp | 4 | -10/+18 | |
2021-07-23 | glasm: Implement SetAttribute ViewportMask | ameerj | 2 | -1/+10 | |
2021-07-23 | shader: Split profile and runtime info headers | ReinUsesLisp | 4 | -1/+4 | |
2021-07-23 | shader: Add logging | ReinUsesLisp | 5 | -10/+12 | |
2021-07-23 | shader: Add shader loop safety check settings | lat9nq | 2 | -0/+10 | |
Also add a setting for enable Nsight Aftermath. | |||||
2021-07-23 | glasm: Use ARB_derivative_control conditionally | ReinUsesLisp | 2 | -7/+29 | |
2021-07-23 | emit_glasm_context_get_set: Remove unused variable | lat9nq | 1 | -1/+0 | |
2021-07-23 | shader,glasm: Implement legacy texcoord loads | ReinUsesLisp | 1 | -2/+10 | |
2021-07-23 | glasm: Implement legacy varyings | ReinUsesLisp | 1 | -17/+56 | |
2021-07-23 | shader: Add support for "negative" and unaligned offsets | ReinUsesLisp | 1 | -0/+8 | |
"Negative" offsets don't exist. They are shown as such due to a bug in nvdisasm. Unaligned offsets have been proved to read the aligned offset. For example, when reading an U32, if the offset is 6, the offset read will be 4. | |||||
2021-07-23 | opengl: Declare fragment outputs even if they are not used | ReinUsesLisp | 2 | -9/+4 | |
Fixes Ori and the Blind Forest's menu on GLASM. For some reason (probably high level optimizations) it is not sanitized on SPIR-V for OpenGL. Vulkan is unaffected by this change. | |||||
2021-07-23 | glasm: Fix immediate texture coordinate | ReinUsesLisp | 1 | -0/+1 | |
2021-07-23 | glasm: Reduce reg allocation leaks from an exception to a log | ReinUsesLisp | 1 | -1/+1 | |
2021-07-23 | glasm: Use integer lod for TXQ | ReinUsesLisp | 2 | -2/+2 | |
2021-07-23 | glasm: Fix global memory fallbacks | ReinUsesLisp | 1 | -9/+10 | |
2021-07-23 | Revert "glasm: Skip phi moves on undefined instructions" | ReinUsesLisp | 1 | -3/+1 | |
Causes regressions on Bowser's Fury. | |||||
2021-07-23 | glasm: Remove unintentional '\n' on Undef32 | ReinUsesLisp | 1 | -1/+1 | |
2021-07-23 | glasm: Use storage buffers instead of global memory when possible | ReinUsesLisp | 4 | -369/+380 | |
2021-07-23 | glasm: Implement Y direction | ReinUsesLisp | 4 | -3/+9 | |
2021-07-23 | glasm: Skip phi moves on undefined instructions | ReinUsesLisp | 1 | -1/+3 | |
2021-07-23 | glasm: Implement undef instructions | ReinUsesLisp | 2 | -15/+15 | |
2021-07-23 | glasm: Fix global memory callbacks | ReinUsesLisp | 1 | -5/+6 | |
2021-07-23 | glasm: Release phi node registers after they are no longer needed | ReinUsesLisp | 2 | -38/+54 | |
2021-07-23 | glasm: Fix INeg32 on negative immediates | ReinUsesLisp | 1 | -1/+5 | |
2021-07-23 | glasm: Remove unnecessary value types | ReinUsesLisp | 3 | -47/+6 | |
2021-07-23 | glasm: Throw when there are register leaks | ReinUsesLisp | 2 | -0/+7 | |
2021-07-23 | glasm: Catch more register leaks | ReinUsesLisp | 8 | -41/+114 | |
Add support for null registers. These are used when an instruction has no usages. This comes handy when an instruction is only used for its CC value, with the caveat of having to invalidate all pseudo-instructions before defining the instruction itself in the register allocator. This commits changes this. Workaround a bug on Nvidia's condition codes conditional execution using branches. | |||||
2021-07-23 | glasm: Fix usage counting on phi nodes | ReinUsesLisp | 3 | -8/+22 | |
2021-07-23 | glasm: Implement global memory fallbacks | ReinUsesLisp | 2 | -50/+89 | |
2021-07-23 | glasm: Implement int64 add and subtract | ReinUsesLisp | 2 | -8/+6 | |
2021-07-23 | emit_glasm_context_get_set: Remove unused variable | lat9nq | 1 | -1/+0 | |
2021-07-23 | glasm: Implement indirect attribute loads | ReinUsesLisp | 4 | -6/+65 | |
2021-07-23 | glasm: Implement image atomics | ReinUsesLisp | 2 | -165/+153 | |
2021-07-23 | glasm: Reorder unreachable image atomic insts | ReinUsesLisp | 1 | -66/+66 | |
Reorder them to the bottom of the file for readability. | |||||
2021-07-23 | glasm: Implement gl_Layer stores | ReinUsesLisp | 1 | -0/+7 | |
2021-07-23 | glasm: Implement SampleId | ReinUsesLisp | 2 | -3/+3 | |
2021-07-23 | glasm: Implement IsHelperInvocation | ReinUsesLisp | 2 | -3/+3 | |
2021-07-23 | glasm: Fix EmitVertex's optimization | ReinUsesLisp | 1 | -1/+1 | |
2021-07-23 | gl_shader_cache,glasm: Conditionally use typeless image reads extension | ReinUsesLisp | 1 | -2/+4 | |
2021-07-23 | glasm: Implement forced early Z | ReinUsesLisp | 1 | -2/+6 | |
2021-07-23 | glasm: Simplify patch reads | ReinUsesLisp | 1 | -5/+2 | |
2021-07-23 | glasm: Fix output patch reads | ReinUsesLisp | 2 | -13/+22 | |
With this, Luigi's Mansion's sand renders properly. | |||||
2021-07-23 | shader: Split profile and runtime information in separate structs | ReinUsesLisp | 4 | -33/+38 | |
2021-07-23 | emit_glasm_context_get_and_set.cpp: Add missing semicolons | ameerj | 1 | -2/+2 | |
2021-07-23 | glasm: Fix patch attribute declarations | ReinUsesLisp | 1 | -1/+1 | |
2021-07-23 | glasm: Implement FSWZADD | ameerj | 3 | -4/+28 | |
2021-07-23 | glasm: Implement PrimitiveId attribute read | ReinUsesLisp | 1 | -0/+3 | |
2021-07-23 | glasm: Implement clip distance stores | ReinUsesLisp | 2 | -0/+15 | |
2021-07-23 | glasm: Fix tessellation input attributes | ReinUsesLisp | 1 | -2/+5 | |
2021-07-23 | glasm: Add missing semicolon on tesscoord reading | ReinUsesLisp | 1 | -1/+1 | |
2021-07-23 | glasm: Fix tessellation headers | ReinUsesLisp | 1 | -2/+2 | |
2021-07-23 | glasm: Add tessellation shader declarations | ReinUsesLisp | 1 | -0/+35 | |
2021-07-23 | glasm: Implement TessellationEvaluationPoint | ReinUsesLisp | 1 | -0/+4 | |
2021-07-23 | glasm: Implement patch memory | ReinUsesLisp | 3 | -6/+51 | |
2021-07-23 | glasm: Fix InvocationId declaration | ReinUsesLisp | 1 | -1/+1 | |
2021-07-23 | glasm: Implement InvocationId | ReinUsesLisp | 2 | -2/+5 | |
2021-07-23 | glasm: Optimize EmitVertex into EMIT | ReinUsesLisp | 1 | -1/+5 | |
2021-07-23 | glasm: Implement geometry shader attribute reads | ReinUsesLisp | 2 | -4/+18 | |
2021-07-23 | glasm: Properly declare attributes on geometry programs | ReinUsesLisp | 3 | -6/+14 | |
2021-07-23 | glasm: Declare geometry program headers | ReinUsesLisp | 1 | -0/+35 | |
2021-07-23 | glasm: Fix potential aliasing bug on cube array samples | ReinUsesLisp | 2 | -35/+44 | |
2021-07-23 | glasm: Implement ImageWrite | ReinUsesLisp | 1 | -4/+7 | |
2021-07-23 | glasm: Implement ImageRead | ReinUsesLisp | 4 | -4/+56 | |
2021-07-23 | glasm: Implement EmitVertex and EndPrimitive | ReinUsesLisp | 2 | -4/+8 | |
2021-07-23 | glasm: Implement ImageGradient | ReinUsesLisp | 2 | -7/+65 | |
2021-07-23 | glasm: Implement 64-bit shifts | ReinUsesLisp | 2 | -12/+14 | |
2021-07-23 | glasm: Implement barriers | ReinUsesLisp | 1 | -3/+3 | |
2021-07-23 | glasm: Fix compute stage name | ReinUsesLisp | 1 | -1/+1 | |
2021-07-23 | glasm: Fix phi instruction types | ReinUsesLisp | 1 | -1/+1 | |
2021-07-23 | glasm: Implement PREC on relevant instructions | ReinUsesLisp | 1 | -6/+12 | |
2021-07-23 | glasm: Implement stores to gl_ViewportIndex | ReinUsesLisp | 4 | -7/+29 | |
2021-07-23 | glasm: Implement gl_PointSize stores | ReinUsesLisp | 1 | -0/+3 | |
2021-07-23 | glasm: Implement gl_PointCoord | ReinUsesLisp | 1 | -0/+4 | |
2021-07-23 | glasm: Implement ImageQueryLod | ReinUsesLisp | 1 | -3/+5 | |
2021-07-23 | glasm: Implement ImageFetch | ReinUsesLisp | 4 | -13/+38 | |
2021-07-23 | glasm: Implement IADD.CC | ameerj | 1 | -1/+26 | |
2021-07-23 | glasm: Implement BFE.CC | ReinUsesLisp | 1 | -0/+8 | |
2021-07-23 | glasm: Implement SelectU1 | ReinUsesLisp | 2 | -4/+5 | |
2021-07-23 | glasm: Implement gl_WorkGroupID | ReinUsesLisp | 2 | -3/+3 | |
2021-07-23 | glasm: Implement TXQ and improve texture info reads | ReinUsesLisp | 2 | -50/+51 | |
2021-07-23 | glasm: Implement gl_FrongFacing attribute | ReinUsesLisp | 1 | -0/+3 | |
2021-07-23 | glasm: Support textures used in more than one stage | ReinUsesLisp | 3 | -4/+24 | |
2021-07-23 | glasm: Implement textureGather instructions | ReinUsesLisp | 2 | -15/+97 | |
2021-07-23 | glasm: Implement gl_FragDepth and gl_SampleMask stores | ReinUsesLisp | 2 | -5/+5 | |
2021-07-23 | glasm: Do not alias ConditionRef for now | ReinUsesLisp | 2 | -3/+2 | |
Immediate condition refs where not handled correctly. Just move the value for now. | |||||
2021-07-23 | shader: Read branch conditions from an instruction | ReinUsesLisp | 5 | -3/+9 | |
Fixes the identity removal pass. | |||||
2021-07-23 | glasm: Implement InstanceId and VertexId | ReinUsesLisp | 1 | -0/+6 | |
2021-07-23 | glasm: Add missing return value on move assignment | ReinUsesLisp | 1 | -0/+1 | |
2021-07-23 | glasm: Fix aliased bitcasts ref counting | ReinUsesLisp | 3 | -13/+42 | |
2021-07-23 | glasm: Remove unintentional comma on vector insert | ReinUsesLisp | 1 | -1/+1 | |
2021-07-23 | glasm: Implement TEX and TEXS instructions | ReinUsesLisp | 4 | -41/+252 | |
Remove lod clamp from texture instructions with lod, as this is not needed (nor supported). | |||||
2021-07-23 | glasm: Add support for non-2D texture samples | ReinUsesLisp | 1 | -4/+26 | |
2021-07-23 | glasm: Reorder unreachable image instructions to the bottom | ReinUsesLisp | 1 | -97/+97 | |
2021-07-23 | glasm: Add support for texture offsets | ReinUsesLisp | 1 | -11/+15 | |
2021-07-23 | glasm: Improve texture sampling instructions | ReinUsesLisp | 2 | -50/+70 | |
2021-07-23 | emit_glasm: Enable ARB_draw_buffers when needed | ReinUsesLisp | 2 | -1/+5 | |
2021-07-23 | emit_glasm: Add support for reading position attributes | ReinUsesLisp | 1 | -3/+13 | |
2021-07-23 | shader_recompiler: GCC fixes | lat9nq | 2 | -9/+9 | |
Fixes members of unnamed union not being accessible, and one function without a declaration. | |||||
2021-07-23 | glasm: Implement rest of shared mem | ameerj | 2 | -35/+29 | |
2021-07-23 | glasm: Implement derivative instructions on GLASM | ReinUsesLisp | 2 | -12/+12 | |
2021-07-23 | glasm: Initial (broken) implementation of TEX on GLASM | ReinUsesLisp | 3 | -299/+386 | |
2021-07-23 | glasm: Implement some graphics instructions on GLASM | ReinUsesLisp | 2 | -6/+5 | |
2021-07-23 | glasm: Add Void type to GLASM values | ReinUsesLisp | 3 | -0/+15 | |
2021-07-23 | glasm: Add graphics specific shader declarations to GLASM | ReinUsesLisp | 2 | -6/+63 | |
2021-07-23 | glasm: Implement local memory for glasm | ameerj | 4 | -9/+12 | |
2021-07-23 | glasm: Initial implementation of phi nodes on GLASM | ReinUsesLisp | 3 | -8/+81 | |
2021-07-23 | glasm: Write result to scalar on integer comparison instructions | ReinUsesLisp | 1 | -10/+10 | |
2021-07-23 | glasm: Declare NV_shader_thread_group when needed | ReinUsesLisp | 1 | -3/+4 | |
2021-07-23 | glasm: Rework control flow introducing a syntax list | ReinUsesLisp | 4 | -39/+42 | |
This commit regresses VertexA shaders, their transformation pass has to be adapted to the new control flow. | |||||
2021-07-23 | glasm: Implement Storage atomics | ameerj | 5 | -109/+156 | |
StorageAtomicExchangeU64 is failing test seemingly due to failure storing 64-bit result into the register | |||||
2021-07-23 | glasm: Ensure reg alloc order across compilers on GLASM | ReinUsesLisp | 1 | -11/+14 | |
Use a struct constructor to serialize register allocation arguments to ensure registers are allocated in the same order regardless of the compiler used. The A and B functions can be called in any order when passed as arguments to "foo": foo(A(), B()) But the order is guaranteed for curly-braced constructor calls in classes: Foo{A(), B()} Use this to get consistent behavior. | |||||
2021-07-23 | glasm: Enable unintentionally disabled register aliasing on GLASM | ReinUsesLisp | 1 | -16/+11 | |
2021-07-23 | glasm: Review all GLASM insts to be aware of register aliasing | ReinUsesLisp | 4 | -20/+51 | |
2021-07-23 | glasm: Implement shuffle and vote instructions on GLASM | ReinUsesLisp | 6 | -97/+158 | |
2021-07-23 | glasm: Add MUFU instructions to GLASM | ReinUsesLisp | 2 | -21/+22 | |
2021-07-23 | glasm: Implement IAbs64 and INeg64 on GLASM | ReinUsesLisp | 2 | -6/+6 | |
2021-07-23 | glasm: Properly clamp Fp64 on GLASM | ReinUsesLisp | 1 | -6/+6 | |
2021-07-23 | glasm: Fix register allocation when moving immediate on GLASM | ReinUsesLisp | 3 | -42/+89 | |
2021-07-23 | glasm: Implement SelectU64 on GLASM | ReinUsesLisp | 2 | -4/+20 | |
2021-07-23 | glasm: Fix clamps so the min value has priority on NAN on GLASM | ReinUsesLisp | 1 | -12/+15 | |
2021-07-23 | glasm: Fix moving U64 immediates to registers in GLASM | ReinUsesLisp | 2 | -3/+4 | |
2021-07-23 | glasm: Implement storage atomic ops | ameerj | 4 | -305/+358 | |
2021-07-23 | glasm: Add conversion instructions to GLASM | ReinUsesLisp | 9 | -282/+351 | |
2021-07-23 | glasm: Add fp min/max insts and fix store for fp64 on GLASM | ReinUsesLisp | 2 | -10/+8 | |
2021-07-23 | glasm: Add logical instructions on GLASM | ReinUsesLisp | 2 | -12/+12 | |
2021-07-23 | glasm: Remove duplicated Fp64 pack instructions on GLASM | ReinUsesLisp | 1 | -8/+0 | |
2021-07-23 | glasm: Remove unnecesary new white space on Clamp GLASM | ReinUsesLisp | 1 | -4/+4 | |
2021-07-23 | glasm: Add floating-point comparisons on GLASM | ReinUsesLisp | 3 | -120/+116 | |
2021-07-23 | emit_glasm: Implement more integer alu ops | ameerj | 2 | -47/+41 | |
2021-07-23 | glasm: Reimplement bitwise ops and BFI/BFE | ameerj | 4 | -88/+108 | |
2021-07-23 | glasm: Initial GLASM fp64 support | ReinUsesLisp | 9 | -55/+152 | |
2021-07-23 | glasm: Implement GLASM fp16 packing and move bitwise insns | ReinUsesLisp | 4 | -66/+77 | |
2021-07-23 | glasm: Remove unused functions left from rebase | ReinUsesLisp | 1 | -12/+0 | |
2021-07-23 | glasm: Specify namespace when using FormatTo | ReinUsesLisp | 1 | -6/+6 | |
2021-07-23 | glasm: Implement more GLASM composite instructions | ReinUsesLisp | 2 | -54/+63 | |
2021-07-23 | glasm: Make GLASM aware of types | ReinUsesLisp | 12 | -1244/+1380 | |
2021-07-23 | glasm: Use CMP.S for Select32 | ameerj | 3 | -12/+8 | |
also fixes ADD and SUB to use U modifier | |||||
2021-07-23 | glasm: Implement more logical ops | ameerj | 2 | -5/+5 | |
2021-07-23 | glasm: Implement BFI, BFE | ameerj | 4 | -138/+164 | |
Along with implementations of common instructions along the way | |||||
2021-07-23 | glasm: Use BitField instead of C bitfields | ReinUsesLisp | 2 | -8/+12 | |
2021-07-23 | glasm: Remove unused argument in identity instructions on GLASM | ReinUsesLisp | 1 | -7/+7 | |
2021-07-23 | glasm: Implement basic GLASM instructions | ReinUsesLisp | 9 | -840/+1167 | |
2021-07-23 | glasm: Changes to GLASM register allocator and emit context | ReinUsesLisp | 4 | -26/+64 | |
2021-07-23 | glasm: Add GLASM backend infrastructure | ReinUsesLisp | 26 | -0/+3079 | |