Skip to content

Instantly share code, notes, and snippets.

View certik's full-sized avatar

Ondřej Čertík certik

View GitHub Profile
@certik
certik / plan.md
Created March 12, 2026 23:11
LFortran Quadruple Precision Plan

Plan for Implementing Quadruple Precision (REAL(KIND=16)) in LFortran

Overview

LFortran will support full IEEE 754 binary128 quadruple precision (REAL(KIND=16) and COMPLEX(KIND=16)) using LLVM’s native fp128 type for all arithmetic and most operations. This provides exact binary128 semantics (15-bit exponent, 113-bit mantissa) on every target LLVM supports.

Transcendental intrinsics will be provided through an optional, thin runtime wrapper that can link to libquadmath (or the platform’s _Float128 / long-double functions when available). Basic operations, array intrinsics, and most language features will work with zero extra dependencies.

The implementation is designed to be incremental, portable, and consistent with existing LFortran infrastructure (ASR → LLVM IR lowering, runtime library, multiple backends, JIT).

#!/usr/bin/env python3
"""
Compute PR-per-person statistics from LFortran release notes.
Usage:
python pr_stats.py [VERSION]
VERSION e.g. "0.61.0" or "v0.61.0". Omit for the latest release.
Looks up each contributor's real name via the GitHub API.
module ring_mod
! this module isolates all of the modulo ring arithmetic associated
! with the Euler conjecture search code.
implicit none
private
public :: ik, ring_modulo_t, jloop, kloop, lloop
(gfortran) ~/repos/fpm(main)$ fpm --compiler=$FC test
+ mkdir -p build/dependencies
Initialized empty Git repository in /Users/ondrej/repos/fpm/build/dependencies/toml-f/.git/
remote: Enumerating objects: 289, done.
remote: Counting objects: 100% (289/289), done.
remote: Compressing objects: 100% (236/236), done.
remote: Total 289 (delta 54), reused 171 (delta 20), pack-reused 0 (from 0)
Receiving objects: 100% (289/289), 463.43 KiB | 2.09 MiB/s, done.
Resolving deltas: 100% (54/54), done.
From https://github.com/toml-f/toml-f
~/repos/fpm(lf-21)$ fpm --compiler=$FC test --flag "--cpp --realloc-lhs-arrays --use-loop-variable-after-loop"
Project is up to date
<INFO>TEST help SUBCOMMAND STARTED
<INFO>check fpm for NAME SYNOPSIS DESCRIPTION
STOP
<INFO>CMD=build/lfortran_B32920A010424AF1/test//../app/fpm help fpm >fpm_scratch_help.txt EXITSTAT=0 CMDSTAT=0 MESSAGE=
<INFO>have completed 4 tests
<INFO>check new for NAME SYNOPSIS DESCRIPTION
STOP
<INFO>CMD=build/lfortran_B32920A010424AF1/test//../app/fpm help new >fpm_scratch_help.txt EXITSTAT=0 CMDSTAT=0 MESSAGE=
@certik
certik / a.ll
Created September 11, 2025 14:48
; ModuleID = 'a.cpp'
source_filename = "a.cpp"
target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128-Fn32"
target triple = "arm64-apple-macosx15.0.0"
%"class.std::__1::unique_ptr" = type { %"class.std::__1::__compressed_pair" }
%"class.std::__1::__compressed_pair" = type { %"struct.std::__1::__compressed_pair_elem" }
%"struct.std::__1::__compressed_pair_elem" = type { ptr }
%"struct.std::__1::__value_init_tag" = type { i8 }
$ ./chess
Choose your color (White/Black):
White
You play as White.
+---+---+---+---+---+---+---+---+
8 | r | n | b | q | k | b | n | r |
+---+---+---+---+---+---+---+---+
7 | p | p | p | p | p | p | p | p |
+---+---+---+---+---+---+---+---+
6 | | | | | | | | |
2025-04-27T09:19:55.5398220Z ##[group]Run case "$OSTYPE" in darwin*) export MACOS=1;; *) export MACOS=0;; esac
2025-04-27T09:19:55.5398600Z case "$OSTYPE" in darwin*) export MACOS=1;; *) export MACOS=0;; esac
2025-04-27T09:19:55.5398870Z export LFORTRAN_TEST_ENV_VAR='STATUS OK!'
2025-04-27T09:19:55.5399060Z shell ci/test_lsp.sh
2025-04-27T09:19:55.5491660Z shell: /bin/bash -e -l {0}
2025-04-27T09:19:55.5491810Z env:
2025-04-27T09:19:55.5491950Z MACOSX_DEPLOYMENT_TARGET: 14
2025-04-27T09:19:55.5492120Z MAMBA_ROOT_PREFIX: /Users/runner/micromamba
2025-04-27T09:19:55.5492350Z MAMBA_EXE: /Users/runner/micromamba-bin/micromamba
2025-04-27T09:19:55.5492590Z CONDARC: /Users/runner/work/_temp/setup-micromamba/.condarc
This file has been truncated, but you can view the full file.
subroutine g0
integer :: x, i
x = 1
do i = 1, 10
x = x*i
end do
end subroutine
subroutine g1
@certik
certik / a.f90
Created December 29, 2024 19:30
! Code from:
! https://fortran-lang.discourse.group/t/nvfortran-comparison-of-do-concurrent-vs-openmp-code/8552/18
!
! Adapted version with OpenMP and DO CONCURRENT in the same program file
! and removed disk write in the end.
!
MODULE all_data
USE iso_fortran_env, ONLY: int64, i4 => int32, r8 => real64
IMPLICIT NONE